MySQL
本文是学习实验楼-MYSQL基础课程笔记,希望实际操作的可以看原课程。
虽然是对MySQL数据库的介绍,但是比较基础所以也是SQL数据库基本操作的总结。提醒自己后续进行深入学习。
-
创建数据库
CREATE DATABASE namedb;
show databases; -
创建表格
CREATE TABLE nametab (字段 类型,…);
show tables;约束
束类型 主键 默认值 唯一 外键 非空 键字 PRIMARY KEY DEFAULT UNIQUE FOREIGN KEY NOT NULL 主键
- CREATE TABLE nametab (
ziduan1 int(10) PRIMARY KEY,
ziduan2 char(20),
ziduan3 int (14)
); - CREATE TABLE nametab (
ziduan1 int(10) ,
ziduan2 char(20),
ziduan3 int (14),
CONSTRAINT ziduan1_pk PRIMARY KEY(ziduan1)
); - 复合主键
CREATE TABLE nametab (
ziduan1 int(10) ,
ziduan2 char(20),
ziduan3 int (14),
CONSTRAINT fuhe_pk PRIMARY KEY(ziduan1,ziduan2)
);
默认值
- CREATE TABLE nametab (
ziduan1 int(10) DEFAULT 10,
ziduan2 char(20),
ziduan3 int (14),
);
唯一
- CREATE TABLE nametab (
ziduan1 int(10) ,
ziduan2 char(20),
ziduan3 int (14),
UNIQUE(ziduan3)
);
ziduan3在整个表中不可重复,insert时有重复会冲突,insert会失败
外键
- CREATE TABLE nametab1 (
ziduan1 int(10) ,
ziduan2 char(20),
ziduan3 int (14)
);
CREATE TABLE nametab2 (
ziduan1 int(10) ,
ziduan2 char(20),
ziduan3 int (14),
CONSTRAINT emp_fk FOREIGN_KEY(ziduan1 ) REFERENCES nametab1(ziduan1)
);
非空约束
- CREATE TABLE nametab1 (
ziduan1 int(10) NOT NULL,
ziduan2 char(20),
ziduan3 int (14)
);
- CREATE TABLE nametab (
常用自增:(必须int类型)
CREATE TABLE nametab1 (
ziduan1 int(10) NOT NULL AUTO_INCREMENT,
ziduan2 char(20),
ziduan3 int (14)
);
-
增
insert into nametab (字段1, 字段2,…) VALUES (值1,值2,…); -
删
drop database namedb;
drop table namtab;
删除列:
ALTER TABLE 表名字 DROP COLUMN 列名字;
ALTER TABLE 表名字 DROP 列名字;
删数据:
DELETE FROM 表名字 WHERE 条件; -
改
-
不允许修改数据库名字,若想修改数据库,则重建导出
-
改表名:
RENAME TABLE 原名 TO 新名字;
ALTER TABLE 原名 RENAME 新名;
ALTER TABLE 原名 RENAME -
改表结构
添加列:
ALTER TABLE 表名字 ADD COLUMN 列名字 数据类型 约束;
ALTER TABLE 表名字 ADD 列名字 数据类型 约束;
重命名:(若数据类型改变可能导致数据丢失)
ALTER TABLE 表名字 CHANGE 原列名 新列名 数据类型 约束;
只修改数据类型:(可能导致数据丢失)
ALTER TABLE 表名字 MODIFY 列名字 新数据类型; -
改数据
UPDATE 表名字 SET 列1=值1,列2=值2 WHERE 条件; -
查
select */字段1,字段2… from nametab where 条件
条件: -
条件1 AND/OR 条件2 id>10 AND grade <60
-
IN/NOT IN id IN (1,3,5,7,8,9)
-
LIKE & _ (一个未指定字符),% (不定个未指定字符)
select * from nametab where phone like ‘0411 8789 05__’;
select * from nametab where name like ‘c%’; -
排序 (ASC 升序 DESC 降序)
SELECT * FROM nametab ORDER BY id DESC; -
内置函数
数名 COUNT SUM AVG MAX MIN 计数 求和 求平均值 最大值 最小值 SELECT MAX(age) AS older ,MIN(age), AVG(age) FROM nametab ;
-
子查询函数
SELECT* FROM nametab WHERE id IN (SELECT id FROM grades WHERE grade<60);
SELECT* FROM nametab GROUP BY class HAVING id IN (SELECT id FROM grades WHERE grade<60); -
连接 join
SELECT id,name,people_num
FROM employee,department
WHERE employee.in_dpt = department.dpt_name
ORDER BY id;
等价与
SELECT id,name,people_num
FROM employee JOIN department
ON employee.in_dpt = department.dpt_name
ORDER BY id; -
索引
ALTER TABLE 表名字 ADD INDEX 索引名 (列名);
CREATE INDEX 索引名 ON 表名字 (列名); -
视图
CREATE VIEW 视图名(列a,列b,列c) AS SELECT 列1,列2,列3 FROM 表名字; -
数据导入导出
LOAD DATA INFILE ‘文件路径和文件名’ INTO TABLE 表名字;
SELECT 列1,列2 INTO OUTFILE ‘文件路径和文件名’ FROM 表名字; -
使用 mysqldump 备份
mysqldump -u root 数据库名>备份文件名; #备份整个数据库
mysqldump -u root 数据库名 表名字>备份文件名; #备份整个表 -
恢复
- source sql文件
- mysql -u root 新数据库< 恢复的sql文件