mysql启动与停止
SQL通用语法
1. SQL语句可以单行或多行书写,以分号结尾。
2. SQL语句可以使用空格/缩进来增强语句的可读性。
3. MySQL数括厍的SQL语句不区分大小写,关键字建议使用大写
注释:
.单行注释:-- 注释内容或#注释内容(MySQL特有)
·多行注释:/*注释内容*/
SQL分类
SQL语句,根据其功能,主要分为四类:DDL、DML、DQL、DCL;
数据库操作
1). 查询所有数据库:
show databases ;
2). 查询当前数据库
select database() ;
3). 创建数据库
create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序 规则 ] ;
例如:
create database text;
create database if not extists text;
创建一个itheima数据库,并且指定字符集
create database itheima default charset utf8mb4;
4). 删除数据库
drop database [ if exists ] 数据库名 ;
drop database if not extists text;
5). 切换数据库
use 数据库名 ;
表操作
1).查询当前数据库所有表
show tables;
比如,我们可以切换到sys这个系统数据库,并查看系统数据库中的所有表结构。
1. use sys; 2. show tables;
2). 查看指定表结构
desc 表名 ;
3). 查询指定表的建表语句
show create table 表名 ;
4). 创建表结构
CREATE TABLE 表名( 字段1 字段1类型 [ COMMENT 字段1注释 ], 字段2 字段2类型 [COMMENT 字段2注释 ], 字段3 字段3类型 [COMMENT 字段3注释 ], ...... 字段n 字段n类型 [COMMENT 字段n注释 ] ) [ COMMENT 表注释 ] ; //注意结尾逗号的使用,最后一个字段后面没有逗号!!
create table yg( id int comment '编号', name varchar(50) comment '姓名', age int comment '年龄', gender varchar(1) comment '性别' ) comment '员工表';
同时也可以通过复制的方式创建表;
如:
假设我们有一个表 yg mysql> desc yg; +--------------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+------------+------+-----+---------+-------+ | 编号 | char(6) | NO | PRI | NULL | | | 姓名 | char(10) | NO | | NULL | | | 性别 | tinyint(1) | YES | | NULL | | | 政治面貌 | char(4) | YES | | NULL | | | 出生日期 | datetime | YES | | NULL | | +--------------+------------+------+-----+---------+-------+ 5 rows in set (0.00 sec) mysql> select*from yg; +--------+--------+--------+--------------+---------------------+ | 编号 | 姓名 | 性别 | 政治面貌 | 出生日期 | +--------+--------+--------+--------------+---------------------+ | 100000 | Tom | 1 | CH | 2002-03-19 00:00:00 | +--------+--------+--------+--------------+---------------------+ 创建一个xxxx表同时复制yg表的所有信息 mysql> create table xxxx as select *from yg; mysql> desc xxxx; +--------------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+------------+------+-----+---------+-------+ | 编号 | char(6) | NO | | NULL | | | 姓名 | char(10) | NO | | NULL | | | 性别 | tinyint(1) | YES | | NULL | | | 政治面貌 | char(4) | YES | | NULL | | | 出生日期 | datetime | YES | | NULL | | +--------------+------------+------+-----+---------+-------+ 5 rows in set (0.02 sec) mysql> select*from xxxx; +--------+--------+--------+--------------+---------------------+ | 编号 | 姓名 | 性别 | 政治面貌 | 出生日期 | +--------+--------+--------+--------------+---------------------+ | 100000 | Tom | 1 | CH | 2002-03-19 00:00:00 | +--------+--------+--------+--------------+---------------------+ 1 row in set (0.00 sec) 或者创建一个yyyy表,同时复制yg表部分信息 mysql> create table yyyy as select 姓名,性别,出生日期 from yg; mysql> desc yyyy; +--------------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+------------+------+-----+---------+-------+ | 姓名 | char(10) | NO | | NULL | | | 性别 | tinyint(1) | YES | | NULL | | | 出生日期 | datetime | YES | | NULL | | +--------------+------------+------+-----+---------+-------+ 3 rows in set (0.01 sec) mysql> select*from yyyy; +--------+--------+---------------------+ | 姓名 | 性别 | 出生日期 | +--------+--------+---------------------+ | Tom | 1 | 2002-03-19 00:00:00 | +--------+--------+---------------------+
5). 添加字段
alter table 表名 ADD 字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];
如:为emp表增加一个新的字段”昵称”为nickname,类型为varchar(20)
alter table emp ADD nickname varchar(20) COMMENT '昵称';
mysql增加表中新列的方法:(在末尾添加新列(字段))
ALTER TABLE 表名 ADD 新字段名 数据类型 [约束条件];
mysql> select*from salary; +--------+---------+--------+ | 编号 | 收入 | 支出 | +--------+---------+--------+ | 000001 | 2100.8 | 123.09 | | 010008 | 1582.62 | 88.03 | | 020010 | 2860 | 198 | | 020018 | 2347.68 | 180 | | 102201 | 2569.88 | 185.65 | | 102208 | 1980 | 100 | | 108991 | 3259.98 | 281.52 | | 111006 | 2347.68 | 79.58 | | 210678 | 2240 | 121 | | 302566 | 2980.7 | 210.2 | | 308759 | 2531.98 | 199.08 | | 504209 | 2066.15 | 108 | +--------+---------+--------+ mysql> alter table salary add column 工资 int(4); mysql> select*from salary; +--------+---------+--------+------+ | 编号 | 收入 | 支出 | 工资 | +--------+---------+--------+------+ | 000001 | 2100.8 | 123.09 | NULL | | 010008 | 1582.62 | 88.03 | NULL | | 020010 | 2860 | 198 | NULL | | 020018 | 2347.68 | 180 | NULL | | 102201 | 2569.88 | 185.65 | NULL | | 102208 | 1980 | 100 | NULL | | 108991 | 3259.98 | 281.52 | NULL | | 111006 | 2347.68 | 79.58 | NULL | | 210678 | 2240 | 121 | NULL | | 302566 | 2980.7 | 210.2 | NULL | | 308759 | 2531.98 | 199.08 | NULL | | 504209 | 2066.15 | 108 | NULL | +--------+---------+--------+------+ //可以用于做两列数的运算 mysql> update salary set 工资=收入-支出; mysql> select*from salary; +--------+---------+--------+------+ | 编号 | 收入 | 支出 | 工资 | +--------+---------+--------+------+ | 000001 | 2100.8 | 123.09 | 1978 | | 010008 | 1582.62 | 88.03 | 1495 | | 020010 | 2860 | 198 | 2662 | | 020018 | 2347.68 | 180 | 2168 | | 102201 | 2569.88 | 185.65 | 2384 | | 102208 | 1980 | 100 | 1880 | | 108991 | 3259.98 | 281.52 | 2978 | | 111006 | 2347.68 | 79.58 | 2268 | | 210678 | 2240 | 121 | 2119 | | 302566 | 2980.7 | 210.2 | 2770 | | 308759 | 2531.98 | 199.08 | 2333 | | 504209 | 2066.15 | 108 | 1958 | +--------+---------+--------+------+ //温故而知新 mysql> alter table salary change 工资 工资 double(6,2); mysql> update salary set 工资=收入-支出; mysql> select*from salary; +--------+---------+--------+---------+ | 编号 | 收入 | 支出 | 工资 | +--------+---------+--------+---------+ | 000001 | 2100.8 | 123.09 | 1977.71 | | 010008 | 1582.62 | 88.03 | 1494.59 | | 020010 | 2860 | 198 | 2662.00 | | 020018 | 2347.68 | 180 | 2167.68 | | 102201 | 2569.88 | 185.65 | 2384.23 | | 102208 | 1980 | 100 | 1880.00 | | 108991 | 3259.98 | 281.52 | 2978.46 | | 111006 | 2347.68 | 79.58 | 2268.10 | | 210678 | 2240 | 121 | 2119.00 | | 302566 | 2980.7 | 210.2 | 2770.50 | | 308759 | 2531.98 | 199.08 | 2332.90 | | 504209 | 2066.15 | 108 | 1958.15 | +--------+---------+--------+---------+
6). 修改数据类型
(只修改类型)
ALTER TABLE 表名 modify 字段名 新数据类型 (长度);
修改字段名和字段类型(同时修改类型和名字)
ALTER TABLE 表名 change 旧字段名 新字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];
例如:将emp表的nickname字段修改为username,类型为varchar(30)
ALTER TABLE emp change nickname username varchar(30) COMMENT '昵称'
1.掌握修改表结构的方法; 增加列 alter table 表名 add 列名 列类型 alter table 表名 add 列名 列类型 after 列名 修改列类型 alter table 表名 modify 列名 新类型 修改列 alter table 表名 change 列名 新字段名 字段选项 ; 调整列位置 alter table 表名 change 列名 新列名 字段选项 after字段名 删除列 alter table 表名 drop column 字段名 2.插入记录; insert into 表名 values
例如:
//创建表 mysql> CREATE TABLE yg( -> 编号 char(6) NOT NULL primary key, -> 姓名 char(10) NOT NULL, -> 出生日期 date, -> 性别 tinyint(1) NOT NULL DEFAULT 1, -> 籍贯 char(10) -> ); mysql> desc yg; +--------------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+------------+------+-----+---------+-------+ | 编号 | char(6) | NO | PRI | NULL | | | 姓名 | char(10) | NO | | NULL | | | 出生日期 | date | YES | | NULL | | | 性别 | tinyint(1) | NO | | 1 | | | 籍贯 | char(10) | YES | | NULL | | +--------------+------------+------+-----+---------+-------+ //添加一个列 mysql> alter table yg add xxx char(1); mysql> desc yg; +--------------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+------------+------+-----+---------+-------+ | 编号 | char(6) | NO | PRI | NULL | | | 姓名 | char(10) | NO | | NULL | | | 出生日期 | date | YES | | NULL | | | 性别 | tinyint(1) | NO | | 1 | | | 籍贯 | char(10) | YES | | NULL | | | xxx | char(1) | YES | | NULL | | +--------------+------------+------+-----+---------+-------+ //添加一个列在某列之后 mysql> alter table yg add yyy char(1) after 姓名; mysql> desc yg; +--------------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+------------+------+-----+---------+-------+ | 编号 | char(6) | NO | PRI | NULL | | | 姓名 | char(10) | NO | | NULL | | | yyy | char(1) | YES | | NULL | | | 出生日期 | date | YES | | NULL | | | 性别 | tinyint(1) | NO | | 1 | | | 籍贯 | char(10) | YES | | NULL | | | xxx | char(1) | YES | | NULL | | +--------------+------------+------+-----+---------+-------+ //修改“出生日期”类型为“datetime” mysql> alter table yg modify 出生日期 datetime; mysql> desc yg; +--------------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+------------+------+-----+---------+-------+ | 编号 | char(6) | NO | PRI | NULL | | | 姓名 | char(10) | NO | | NULL | | | yyy | char(1) | YES | | NULL | | | 出生日期 | datetime | YES | | NULL | | | 性别 | tinyint(1) | NO | | 1 | | | 籍贯 | char(10) | YES | | NULL | | | xxx | char(1) | YES | | NULL | | +--------------+------------+------+-----+---------+-------+ //同时修改字段名与类型 mysql> alter table yg change xxx XYG double; mysql> desc yg; +--------------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+------------+------+-----+---------+-------+ | 编号 | char(6) | NO | PRI | NULL | | | 姓名 | char(10) | NO | | NULL | | | yyy | char(1) | YES | | NULL | | | 出生日期 | datetime | YES | | NULL | | | 性别 | tinyint(1) | NO | | 1 | | | 籍贯 | char(10) | YES | | NULL | | | XYG | double | YES | | NULL | | +--------------+------------+------+-----+---------+-------+ //用于位移某列,同时也可以修改(未赋值的转化为初始值) mysql> alter table yg change 性别 性别 tinyint(1) after 姓名; mysql> desc yg; +--------------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+------------+------+-----+---------+-------+ | 编号 | char(6) | NO | PRI | NULL | | | 姓名 | char(10) | NO | | NULL | | | 性别 | tinyint(1) | YES | | NULL | | | yyy | char(1) | YES | | NULL | | | 出生日期 | datetime | YES | | NULL | | | 籍贯 | char(10) | YES | | NULL | | | XYG | double | YES | | NULL | | +--------------+------------+------+-----+---------+-------+ //删除“籍贯”列 mysql> alter table yg drop column 籍贯; mysql> desc yg; +--------------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+------------+------+-----+---------+-------+ | 编号 | char(6) | NO | PRI | NULL | | | 姓名 | char(10) | NO | | NULL | | | 性别 | tinyint(1) | YES | | NULL | | | yyy | char(1) | YES | | NULL | | | 出生日期 | datetime | YES | | NULL | | | XYG | double | YES | | NULL | | +--------------+------------+------+-----+---------+-------+ //插入数据并查看所以记录 mysql> insert into yg values('100000','Tom','1','CH','x','2002-03-19','3.14'); mysql> select*from yg; +--------+--------+--------+--------------+------+---------------------+------+ | 编号 | 姓名 | 性别 | 政治面貌 | yyy | 出生日期 | XYG | +--------+--------+--------+--------------+------+---------------------+------+ | 100000 | Tom | 1 | CH | x | 2002-03-19 00:00:00 | 3.14 | +--------+--------+--------+--------------+------+---------------------+------+
7). 删除字段
ALTER TABLE 表名 drop 字段名;
8). 修改表名
ALTER TABLE 表名 rename to 新表名;
9). 删除表
drop table (if exists) 表名;
10). 删除指定表, 并重新创建表
truncate table 表名;
作用为清空当前表;
11).在表内输入信息 source
输入信息:
insert into 表名 values('1','sxs','啦啦',.........);
文件中导入数据到自己命名的数据库中:
source 地址/文件名.文件格式
例如:
mysql> source C:\Users\jolly\Downloads/sy1.sql Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) //表明成功
12).更新修改表内信息
mysql> desc kc; +----------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+------------+------+-----+---------+-------+ | 课程号 | char(3) | NO | PRI | NULL | | | 课程名 | char(16) | NO | | NULL | | | 开课学期 | tinyint(1) | NO | | 1 | | | 学时 | tinyint(1) | NO | | NULL | | | 学分 | tinyint(1) | YES | | NULL | | +----------+------------+------+-----+---------+-------+ mysql> select *from kc; +--------+----------------+----------+------+------+ | 课程号 | 课程名 | 开课学期 | 学时 | 学分 | +--------+----------------+----------+------+------+ | 101 | 计算机基础 | 1 | 80 | 5 | | 102 | 程序设计与语言 | 2 | 68 | 4 | | 206 | 离散数学 | 4 | 68 | 4 | | 208 | 数据结构 | 5 | 68 | 4 | | 209 | 操作系统 | 6 | 68 | 4 | | 210 | 计算机原理 | 5 | 85 | 5 | | 212 | 数据库原理 | 7 | 68 | 4 | | 301 | 计算机网络 | 7 | 51 | 3 | | 302 | 软件工程 | 7 | 51 | 3 | +--------+----------------+----------+------+------+ //修改“kc”表的所有课程的课程名,将所有课程的课程名后都加上“课”, 比如原来“101”课程的课程名为“计算机基础”,修改后的课程名为“计算机基础课”。 //mysql使用函数concat,concat使用方法为concat(字符串,字符串) mysql> update kc set 课程名 =concat(课程名,'课'); mysql> select*from kc; +--------+------------------+----------+------+------+ | 课程号 | 课程名 | 开课学期 | 学时 | 学分 | +--------+------------------+----------+------+------+ | 101 | 计算机基础课 | 1 | 80 | 5 | | 102 | 程序设计与语言课 | 2 | 68 | 4 | | 206 | 离散数学课 | 4 | 68 | 4 | | 208 | 数据结构课 | 5 | 68 | 4 | | 209 | 操作系统课 | 6 | 68 | 4 | | 210 | 计算机原理课 | 5 | 85 | 5 | | 212 | 数据库原理课 | 7 | 68 | 4 | | 301 | 计算机网络课 | 7 | 51 | 3 | | 302 | 软件工程课 | 7 | 51 | 3 | +--------+------------------+----------+------+------+ //将kc表的所有学分-3 mysql> update kc set 学分=学分-3; mysql> select*from kc; +--------+------------------+----------+------+------+ | 课程号 | 课程名 | 开课学期 | 学时 | 学分 | +--------+------------------+----------+------+------+ | 101 | 计算机基础课 | 1 | 80 | 2 | | 102 | 程序设计与语言课 | 2 | 68 | 1 | | 206 | 离散数学课 | 4 | 68 | 1 | | 208 | 数据结构课 | 5 | 68 | 1 | | 209 | 操作系统课 | 6 | 68 | 1 | | 210 | 计算机原理课 | 5 | 85 | 2 | | 212 | 数据库原理课 | 7 | 68 | 1 | | 301 | 计算机网络课 | 7 | 51 | 0 | | 302 | 软件工程课 | 7 | 51 | 0 | +--------+------------------+----------+------+------+ //将“xs_kc”表的所有课程号为“101”的记录删除 mysql> delete from kc where 课程号=101; mysql> select *from kc; +--------+------------------+----------+------+------+ | 课程号 | 课程名 | 开课学期 | 学时 | 学分 | +--------+------------------+----------+------+------+ | 102 | 程序设计与语言课 | 2 | 68 | 1 | | 206 | 离散数学课 | 4 | 68 | 1 | | 208 | 数据结构课 | 5 | 68 | 1 | | 209 | 操作系统课 | 6 | 68 | 1 | | 210 | 计算机原理课 | 5 | 85 | 2 | | 212 | 数据库原理课 | 7 | 68 | 1 | | 301 | 计算机网络课 | 7 | 51 | 0 | | 302 | 软件工程课 | 7 | 51 | 0 | +--------+------------------+----------+------+------+
数据类型
1). 数值类型
常用用法:
年龄字段;不会出现负数, 而且人的年龄不会太大 所以用
age tinyint unsigned
分数 ; 总分100分, 最多出现一位小数
score double(4,1)
对于精度型:decimal(包括小数位的所有位数,小数位);
2). 字符串类型
一般来说,只有char 和 varchar常用,其他相对较少用;
char 与 varchar 都可以描述字符串:
- char是定长字符串,指定长度多长,就占用多少个字符,和字段值的长度无关
- 而varchar是变长字符串,指定的长度为最大占用长度
- 相对来说,char的性能会更高,更快些,varchar则可以省空间
3). 日期时间类型
常用用法:
生日字段; birthday
birthday date
创建时间; createtime
createtime datetime
例子:
create table emp( id int comment '编号', workno varchar(10) comment '工号', name varchar(10) comment '姓名', gender char(1) comment '性别', age tinyint unsigned comment '年龄', idcard char(18) comment '身份证号', entrydate date comment '入职时间' ) comment '员工表';