目录
登录
mysql -u root -p
查询
- 查看所有数据库
SHOW databases;
选择数据库
USE 数据库名;
- 查看数据库中有哪些表
SHOW tables
查询表中数据(上节)
SELECT * FROM 表名
创建
- 创建数据库
CREATE DATABASE 数据库名
创建数据表
CREATE TABLE students(name VARCHAR(20),id VARCHAR(20),sex CHAR(1),grade INT);
- 查看数据表架构
DESCRIBE students
- 向表中添加数据
INSERT INTO 表名
VALUES('内容1','内容2');
常用数据类型
- 数值:TINYINT SMALLINT MEDIUMINT
INT或INTEGER
BIGINT FLOAT DOUBLE - 日期/时间:DATE(YYYY-MM-DD) TIME(HH:MM:SS) YEAR(YYYY) DATETIME(YYYY-MM-DD- HH:MM:SS) TIMESTAMP(时间戳,YYYYMMDD HHMMSS)
- 字符串:CHAR VARCHAR YINYBLOB TINYTEXT BLOB(二进制形式的长文本数据) TEXT(长文本数据) MEDIUMBLOB MEDIUMTEXT LONGBLOB LONGTEXT
- 删除数据
DELETE FROM 表名 WHERE 条件
- 修改数据
UPDATE SET 改前='改后' WHERE 条件
- 总结:增删改查——INSERT、DELETE、UPDATE、SELECT
MySQL建表约束
主键约束
它能够唯一确定一张表中的一条记录。使得该字段不重复且不为空。
添加单条约束:
CREATE TABLE user
(
id INT PRIMARY KEY,--这里id不为空、不重复
name VARCHAR(20)
);
添加联合约束:
CREATE TABLE user2
(
id INT,
name VARCHAR(20)
password VARCHAR(20)
PRIMARY KEY(id,name)--这里id和name都不能为空,不能同时重复
);
自增约束
CREATE TABLE user3
(
id INT PRIMARY AUTO_INCREMENT,
name varchar(20)
);
INSERT INTO user3(name) VALUES('张三');--没有设定id,但id按加入顺序从1开始自增
- 如果创建表的时候没有添加主键约束:
ALTER TABLE user4 ADD PRIMARY KEY(id);
- 删除约束
ALTER TABLE user4 DROP PRIMARY KEY;
- 修改约束
ALTER TABLE user4 MODIFY id INT PRIMARY KEY;
唯一约束
在建表时设置唯一约束:
格式一:这种格式可以同时设置多个
CREATE TABLE user5
(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20);
UNIQUE(id,name);
--id和name都设置,此时不同时重复就可以添加,类似联合主键
)
格式二:
CREATE TABLE user6
(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) UNIQUE//只设置name
);
建表后再添加唯一约束
CREATE TABLE user7
(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20);
)
ALTER TABLE user4 ADD UNIQUE(name);//新增name为唯一约束
- 删除唯一约束
ALTER TABLE user7 DROP INDEX name;
- modify添加唯一约束
ALTER TABLE user7 MODIFY name VARCHAR(20) UNIQUE;
总结:
- 建表的时候可以添加约束
- 使用ALTER…ADD…
- ALTER…MODIFY…
- 删除ALTER…DROP…
非空约束
修饰的字段不能为null
CREATE TABLE user9
(
name VARCHAR(20) NOT NULL;
)
默认约束
如果没有传值使用默认值
CREATE TABLE user10
(
id INT,
name VARCHAR(20),
age INT DEFAULT 10
);
外键约束
涉及到两个表:父表,子表
或 主表,副表
CREATE TABLE classes--班级表
(
id INT PRIMARY KEY,
name VARCHAR(20)
);
CREATE TABLE students--学生表
(
id INT PRIMARY KEY,
name VARCHAR(20),
class_id INT,
FOREIGN KEY(class_id) REFERENCES classes(id)
);
- 主表classes中没有的数据值,在副表中是不可以使用的。
- 主表中的记录被副表引用,是不可以被删除的。
例如:
INSERT INTO classes VALUES(1,'一班');
INSERT INTO classes VALUES(2,'二班');
INSERT INTO classes VALUES(3,'三班');
INSERT INTO classes VALUES(4,'四班');
INSERT INTO students VALUES(1005,'王五',5);--是错误的
DELETE FROM classes WHERE id=4;--错误
三大设计范式
范式,设计得越详细,对某些实际操作可能更好,但是不一定都是好的。
- 第一范式:可以继续拆分,不满足第一范式
- 第二范式:满足第一范式的条件下,除主键外的每一列都必须完全依赖于主键。如果出现不完全依赖,只可能发生在联合主键的情况下。
CREATE TABLE myorder
(
product_id INT,
customer_id INT,
product_name VARCHAR(20),
customer_name VARCHAR(20),
PRIMARY KEY(product_id,customer_id)
);--不满足第二范式
CREATE