创建数据库
方法1:直接创建
CREATE DATABASE myDB;
方法2:在创建之前判断有无该数据库,有就删除,否则将不采取任何操作
CREATE DATABASE IF NOT EXISTS myDB;
使用数据库进行操作
USE myDB;
创建表
CREATE TABLE 表名(
列名 列的数据类型 ?(约束) 约束可写可不写
)
知识扩展:
1、列的数据类型:varchar
、int
、char
、float
、date
、datetime
等等
这里需要注意date和datetime格式的区别:
时间 date(yyyy-mm-dd) datetime yyyy-mm-dd hh:mm:ss
2、主键约束:primary key
使用这个之前,需先写数据类型,可以是数字int
,也可以是字符串类的,但是数字常用
即 id INT PRIMARY KEY
。
3、自动增长:1、要是主键,2、一般为数字,
即id INT PRIMARY KEY AUTO_INCREMENT
4、表名命名规则,mysql中不区分大小写,一般为划线连接,如表名:t_student
外键约束
语法:CONSTRAINT FOREIGN KEY(从表的列名) REFERENCES 主表表名(主表的列名)
-- 以下表为从表
CREATE TABLE t_user(
u_id INT PRIMARY KEY AUTO_INCREMENT,
u_name VARCHAR(6) NOT NULL,
u_age INT,
u_sex CHAR(1) DEFAULT '男',
u_tel CHAR(11) UNIQUE,
u_j_id INT,
CONSTRAINT FOREIGN KEY(u_j_id) REFERENCES t_job(j_id)
);
-- 以下表为主表
CREATE TABLE t_job(
j_id INT PRIMARY KEY AUTO_INCREMENT,
j_name VARCHAR(16) NOT NULL UNIQUE
)
注意事项:
什么是外键约束:外键约束,这个外键约束了另外一张表的主键,因为外键的存在,所有与另外一张表产生关系。
1、创表的时候先创主表再创从表,删表时候,先删从表再删主表,加数据时候,先加主表的数据,再加从表的数据。
删除从表某一项数据的时候需要先暂时接触外键约束,删除,再重新建立约束
如:
SET FOREIGN_KEY_CHECKS = 0;
DELETE FROM shop_yw WHERE yw_name='张三';
SET FOREIGN_KEY_CHECKS = 1;
2、主表的外键和从表的外键数据类型到一致,不能一个int
一个varchar
3、主表的外键必须是主键
插入数据
插入数据的方式有三种方法:
1、INSERT INTO 表名(列名,列名,列名...) VALUES(值,值,值....);
可选择添加数据,列名与数据要一一对应
2、INSERT INTO 表名 VALUES(值,值,.....);
必须对应列名顺序,必须全部添加
3、INSERT INTO 表名 VALUES (值,值,...) ,(),();
使用插入多条数据的时候
表数据的删除
1、DELETE from 表名
这么删相当于把整个表的所有数据都删了
2、DELETE from 表名 WHERE u_id=5;
根据条件去选择某一行去删除
注意事项:删除方法除了delete from
还有TRUNCATE TABLE 表名
两者区别:
DELETE from 表名
这种删除实际只是假删,是有记录的,可以恢复的,就如id,你根据这个id删除了,你再往表里加入数据,却不是从删除的id开始的。
清空表常用:清空表常用 TRUNCATE
注意两者的区别
修改表
UPDATE 表名 set 列名 = 值
会把某一列全部修改为某个值
UPDATE 表名 set 列名 = 值 WHERE u_id=1
根据条件去指定修改某一行的数据
查询
简单查询
SELECT 列名(字段),列名()字段 from 表名
SELECT u_name FROM t_user
SELECT * FROM t_user;
条件查询
SELECT * FROM t_user WHERE u_id=1;
查询后取别名
SELECT u_name AS '名字' , u_age AS '年龄' FROM t_user;
AS熟悉后是可以直接省略不写的
范围查询
>
>=
<
<=
=
!=
or
in
between..and
SELECT * FROM t_user WHERE u_age>18;
SELECT * FROM t_user WHERE u_age>=18;
SELECT * FROM t_user WHERE u_age<18;
SELECT * FROM t_user WHERE u_age<=18;
SELECT * FROM t_user WHERE u_age=18;
SELECT * FROM t_user WHERE u_age!=18;
-- 或
SELECT * FROM t_user WHERE u_age=18 OR u_age =20;
SELECT * FROM t_user WHERE u_age IN (18,20); -- 满足18岁或者20岁的
-- 和
SELECT * FROM t_user WHERE u_age=18 AND u_age =20; -- 即满足18岁又满足20岁的
-- 范围
SELECT * FROM t_user WHERE u_age>=18 AND u_age <=20;
SELECT * FROM t_user WHERE u_age BETWEEN 18 AND 20; -- 前后都包括 等同上面那句话
模糊查询
%任意长度的字符
_单个长度的字符
like
-- 开头是“老”字(长度不限)
SELECT * FROM t_user WHERE u_name like '老%';
-- 中间是“老”字(长度不限)
SELECT * FROM t_user WHERE u_name like '%王%';
-- 开头是“老”字(长度限两位)
SELECT * FROM t_user WHERE u_name like '老_';
-- 中间是“老”字(长度限三位)
SELECT * FROM t_user WHERE u_name like '_老_';
查询去重
DISTINCT
SELECT DISTINCT sage from t_student -- 年龄重复的去除
查询后返回指定条数
LIMIT
SELECT * FROM t_student LIMIT 0,2 -- 0 意思就是从第一条数据开始,取两条
子查询
首先要知道:SELECT 列名(字段),列名()字段 from 表名
select里的子查询
SELECT s_name,(
SELECT s_class_id
FROM t_class AS t2
WHERE t1.s_class_id = t2.c_id
)
FROM t_student
from里的子查询
SELECT *
FROM(
SELECT * FROM t_student LIMIT 0,5
) AS t1
where u_age>18
-- 先从学生表中取出前五条数据,再从这五条数据中查出年龄满足大于18岁的所有学生信息。
-- 注:from的子查询后必须重新取别名,别名可以任意取。
where里的子查询
SELECT *
FROM t_student
WHERE s_class_id = (
SELECT c_id
FROM t_class
WHERE c_name='班级1'
)
-- 查出学生表中,所有班级名称为“班级1”的所有学生信息
聚合函数
1、统计数量 COUNT(*)
SELECT COUNT(*) FROM t_student; -- 查询出学生表中有多少条学生数据
2、平均值 AVG(u_age )
SELECT AVG(u_age ) FROM t_student; -- 查询出学生表中学生的平均年龄是多少
3、最小值MIN(u_age )
SELECT MIN(u_age ) FROM t_student; -- 查询出学生表中学生的最小年龄是多少
4、最大值 MAX(u_age )
SELECT MAX(u_age ) FROM t_student; -- 查询出学生表中学生的最大年龄是多少
5、求和SUM(u_age )
SELECT SUM(u_age ) FROM t_student; -- 查询出学生表中学生的年龄总和是多少
6、按什么排序ORDER BY u_age
默认从小到大排序,若从大到小排序:ORDER BY u_age DESC
SELECT * FROM t_student; ORDER BY u_age -- 查询出学生表中所有的学生信息,按学生的年龄升序排列
SELECT * FROM t_student; ORDER BY u_age DESC -- 查询出学生表中所有的学生信息,按学生的年龄降序排列
7、按什么分组GROUP BY u_age
SELECT u_ssex FROM t_student GROUP BY u_ssex; -- 查询出来后按性别进行分组,一般配合count等使用
8、分组统计后的筛选HAVING
SELECT u_ssex,COUNT(ssex) FROM t_student GROUP BY u_ssex HAVING COUNT(u_ssex)>3;
--
表链接(不全,待补充)
左链接
保全左边的数据,用左链接
SELECT *
FROM t_a LEFT JOIN t_b ON t_a.a_b_id = t_b.b_id;
右链接
保全右边数据,用右链接
SELECT *
FROM t_a RIGHT JOIN t_b ON t_a.a_b_id = t_b.b_id;
全链接
保全两边的数据
SELECT *
FROM c_table JOIN s_table
WHERE c_table.c_id = s_table.s_id;
自链接
备份表
create table 备份表表名 select * from 要备份的表名
create table new_stu_table
select * from stu_table
查看所有数据库
show DATABASES
执行顺序
FROM>WHERE>SELECT>GROUP BY>COUNT()>HAVING>ORDER BY