文章目录
SQL语句
1. 操作数据库(DDL)
连接数据库
mysql -u用户名 -p
enter password:密码
- MySQL的版本为:5.7.26;
退出数据库
exit
quit
查看已经创建的数据库
SHOW DATABASES;
- MYSQL的语句结束,末尾必须添加
;
或者\g
- 数据库中不区分大小写,以空格区分命令,且以分号结束命令。
查看数据库版本
select version();
创建数据库
CREATE DATABASE 数据库名;
CREATE DATABASE 数据库名 charset=utf8;
- 注意
- 当你创建的数据库名有特殊符号时。
- 为解决此问题可以在命名的名字两边加上 ``
- charset:指定编码为utf8
查看当前数据库创建的命令
SHOW CREATE DATABASE 数据库名;
查看当前使用的数据库
SELECT DATABASE();
使用数据库
USE 数据库名;
删除数据库(慎用)
DROP DATABASE 数据库名;
练习
-
创建数据库:Logic_edu
CREATE DATABASE `Logic_edu`;
-
查看已创建的数据库
SHOW DATABASES;
-
查看当前使用的数据库是否是Logic_edu
SELECT DATABASE();
-
若不是,则切换使用Logic_edu数据库
USE Logic_edu;
-
删除Logic_edu数据库
DROP DATABASE Logic_edu;
2. 操作数据表
查看当前数据库中所有表
SHOW TABLES;
-
Empty
表示该数据库中是空的。 -
也可以查看有数据的数据库。
- 当前数据库中含有数据表
lesson1
;
创建表
CREATE TABLE 数据表名(字段 类型 约束[, 字段 类型 约束])
-
需求:
-
创建表名为mytable1,字段id为int并且字段name为varchar(30)
CREATE TABLE mytable1( id INT, NAME VARCHAR(30), ); -- 报错。注意:字段与字段之间以英文状态下的逗号进行分割,但最后一个不允许有逗号。
-
CREATE TABLE mytable1(
id INT,
NAME VARCHAR(30)
); -- 正确代码
-
创建表名为mytable2,指定id为主键并且字段name为varchar(30)
CREATE TABLE mytable2( id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, NAME VARCHAR(30) );
-
其中
PRIMARY KEY
表示主键,NOT NULL
表示非空,AUTO_INCREMENT
表示自增。 -
PRIMARY KEY
,NOT NULL
,AUTO_INCREMENT
代码之间是可以随意替换位置。 -
你也可以写成
id INT AUTO_INCREMENT PRIMARY KEY NOT NULL
-
查看表的创建语句
SHOW CREATE TABLE 数据表名;
-
ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
表示创建表的引擎。 -
修改默认引擎,在
MySQL5.7.26
的文件中有一个my.ini
的文件用记事本打开
查看表描述信息
DESC 数据表名
练习
-
创建
students
表(id、name、age、high、gender、cls_id)CREATE TABLE students( id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, NAME VARCHAR(20), age TINYINT UNSIGNED DEFAULT 18, high DECIMAL(5,2), gender ENUM ("男","女","保密") DEFAULT "", cls_id INT );
在结尾添加
;
分号前添加默认编码集ENGINE=INNODB DEFAULT CAHRSET=utf8
CREATE TABLE students( id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, NAME VARCHAR(20), age TINYINT UNSIGNED DEFAULT 18, high DECIMAL(5,2), gender ENUM ("男","女","保密") DEFAULT "", cls_id INT )ENGINE=INNODB DEFAULT CAHRSET=utf8;
- 枚举类型默认值必须在选项范围内
- 添加上默认值后
CREATE TABLE students(
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
NAME VARCHAR(20),
age TINYINT UNSIGNED DEFAULT 18,
high DECIMAL(5,2),
gender ENUM ("男","女","保密") DEFAULT "保密" ,
cls_id INT
)ENGINE=INNODB DEFAULT CHARSET=utf8;
-
创建
classes
表(id、name)CREATE TABLE classes( id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, NAME VARCHAR(30) )ENGINE=INNODB DEFAULT CHARSET=utf8;
添加表字段
ALTER TABLE 数据表名 ADD 字段 类型;
-- 给students表添加一个生日字段
ALTER TABLE students ADD birthday DATE;
修改表字段
ALTER TABLE 数据表名 MODIFY 字段 类型; – 不重命名
ALTER TABLE 数据表名 CHANGE 原字段名 新字段名 类型及约束; – 将字段重命名
-- 给生日字段指定默认值
ALTER TABLE students MODIFY birthday DATE DEFAULT '1995-08-14';
-- 修改字段的名称birthday改成birth
ALTER TABLE students CHANGE birthday birth DATE DEFAULT '1995-08-14';
删除表字段
ALTER TABLE 数据表名 DROP 字段;
删除数据表(慎用)
DROP TABLE 数据表名称
-- 删除数据表classes
DROP TABLE classes
3. 操作数据
select * from 数据表名称
新增数据
整行插入
INSERT INTO 数据表名 VALUES(值1,值2,值3…);
INSERT INTO students VALUES('Sam',26,'男',8,'1996-01-01');
-- 报错。 ID虽然自增,但是整行插入的时候,也是需要的。
INSERT INTO students VALUES(1,'Sam',26,'男',8,'1996-01-01');
指定列中插入数据
INSERT INTO tabname (字段1, 字段2,…) VALUES (值1,值2,…);
INSERT INTO students(NAME,cls_id) VALUES('Janice',2);
INSERT INTO students NAME,cls_id VALUES('Janice',2);
-- 报错。字段未加括号。无论字段多少。
INSERT INTO students(NAME,gender) VALUES('Mike',1);
-- 枚举类型可以通过下标取值,根据插入顺序,并且从1开始。
指定列中插入多条数据
INSERT INTO 数据表名 (字段1, 字段2,…) VALUES (值1,值2,…),(值1,值2,…);
INSERT INTO students (NAME,gender) VALUES('Lily',2),('John',1);
修改数据
UPDATE 数据表名 SET 字段1=新值,字段2=新值 [WHERE 条件];
练习
- 将姓名全部修改为Fung。
UPDATE students SET NAME=Fung;
-- 新值得加双引号,因为该值VARCHAR类型。
UPDATE students SET NAME='Fung';
-- 将NAME字段的所有值改成Fung。
- 将性别为女的名字修改为rose。
UPDATE students SET NAME='Rose' WHERE gender='女';
- 将id为3的年龄修改为22,并且性别改为女。
UPDATE students SET age=22,gender='女' WHERE id=3;
删除数据
DELETE FROM 数据表名 [WHERE 条件];
练习
- 将姓名为rose的数据删除
DELETE FROM students WHERE NAME='Rose';
-- 真正意义上的删除,物理上的删除。
-- 逻辑删除,60天的缓冲时间。
-- 通过判断,一个字段的值给用户呈现是否删除现象,实际上并没有正真删除。
-- 1.新增标识字段:is_del 用来表示数据是否删除
ALTER TABLE students ADD is_del INT DEFAULT 0;
-- 2.is_del: 0,未删除
-- 3.is_del: 1,已删除
UPDATE students set is_del VALUES(1);
-- 在登陆时,数据还在保存。
-- 60之后,所有数据删除。
查询数据
查询整个表数据
SELECT * FROM 数据表名;
查询****指定字段数据
SELECT 字段1,字段2 FROM 数据表名;
查询****指定字段数据,并给字段起别名
SELECT 字段1 as 别名,字段2 as 别名 FROM 数据表名;
查询指定字段并去重
SELECT DISTINCT 字段1 FROM 数据表名;
练习
- 查询Students表所有数据(不推荐)
SELECT * FROM students;
- 查询Students表中name与gender字段的数据
SELECT NAME,gender FROM students;
SELECT gender,NAME FROM students;
SELECT (NAME,gender) FROM students; -- 报错。不要添加括号
SELECT (NAME) FROM students;-- 可以,但不建议加
- 查询指定字段重命名。
SELECT gender AS '性别',NAME AS '姓名' FROM students;
-- 没有改变原表的字段名
-- 表也可以重命名
SELECT s.gender FROM students AS s;
- 查询Students表中name字段的数据并且去重。
SELECT DISTINCT NAME FROM students;
-- DISTINCT 具有去重的意思。
- 如果多个字段进行去重,字段1+字段2+…+字段n,重复才去重。
SELECT DISTINCT NAME,age FROM students;
where子句
-
where子句通常结合增删改查使用,用于做筛选的条件。
-
比如,查询当id=1的数据
select * from Student where id=1
- 不仅如此,经常结合运算符使用。
比较运算符
运算符 | 描述 |
---|---|
= | 等于 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
!=或<> | 不等于 |
练习
1.查询id大于3的数据
SELECT * FROM students WHERE id>3;
2.查询年龄大于18岁的信息
SELECT * FROM students WHERE age>18;
3.查询姓名不是Fung的数据
SELECT * FROM students WHERE NAME!='Fung';
逻辑运算符
运算符 | 描述 |
---|---|
a and b | 当同时满足a,b时,则为True |
a or b | 当满足a或b其中一个时,则为True |
not a | 否定 |
练习
1.查询18~22之间的所有学生信息
SELECT * FROM students WHERE 18<=age AND age<=22;
-- SELECT * FROM students WHERE 18<=age<=22; 不建议
-- SELECT * FROM students WHERE 18<=age AND <=22; 报错,缺少age
2.查询id大于3的女同学
SELECT * FROM students WHERE id>3 AND gender='女';
3.查询id小于2或者id大于4的学生信息
SELECT * FROM students WHERE id>4 OR id<2;
4.查询年龄不是18的女同学
SELECT * FROM students WHERE age!=18 AND gender='女';
SELECT * FROM students WHERE (NOT age=18) AND gender='女';