目录

1. SQL语句可以单行或多行书写,以分号结尾。
2. SQL语句可以使用空格/缩进来增强语句的可读性。
3. MySQL数括厍的SQL语句不区分大小写,关键字建议使用大写
注释:
- .单行注释:-- 注释内容或#注释内容(MySQL特有)
- ·多行注释:/*注释内容*/
SQL语句,根据其功能,主要分为四类:DDL、DML、DQL、DCL;

show databases ;
select database() ;
- create database [ if not exists ] 数据库名
- [ default charset 字符集 ]
- [ collate 排序 规则 ] ;
例如:
create database text;
create database if not extists text;
创建一个itheima数据库,并且指定字符集
create database itheima default charset utf8mb4;
drop database [ if exists ] 数据库名 ;
drop database if not extists text;
use 数据库名 ;
show tables;
比如,我们可以切换到sys这个系统数据库,并查看系统数据库中的所有表结构。
- use sys;
- show tables;
desc 表名 ;
show create table 表名 ;
- 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 |
- +--------+--------+---------------------+
-
-
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 |
- +--------+---------+--------+---------+
-
-
-
-
-
(只修改类型)
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 |
- +--------+--------+--------+--------------+------+---------------------+------+
ALTER TABLE 表名 drop 字段名;
ALTER TABLE 表名 rename to 新表名;
drop table (if exists) 表名;
truncate table 表名;
作用为清空当前表;
输入信息:
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) //表明成功
- 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 |
- +--------+------------------+----------+------+------+
-
-
-
-
-


常用用法:
年龄字段;不会出现负数, 而且人的年龄不会太大 所以用
age tinyint unsigned
分数 ; 总分100分, 最多出现一位小数
score double(4,1)
对于精度型:decimal(包括小数位的所有位数,小数位);

一般来说,只有char 和 varchar常用,其他相对较少用;
char 与 varchar 都可以描述字符串:
- char是定长字符串,指定长度多长,就占用多少个字符,和字段值的长度无关
- 而varchar是变长字符串,指定的长度为最大占用长度
- 相对来说,char的性能会更高,更快些,varchar则可以省空间

常用用法:
生日字段; 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 '员工表';
