MySQL数据库基本操作介绍汇总
!!! 参考学习哔哩哔哩MySQL教程,一天学会MySQL
-
查询数据库服务器中的所有数据库
- show databases
-
选中一个数据库进行操作
- use {database name}
-
创建数据库
- creat database {database name}
-
数据库中的表
- show tables
-
如何创建数据表
- creat table {table name}(
name VARCHAR(20),
owner VARCHAR(20),
species VARCHAR(20),
sex char(1),
brith DATE,
death DATE);
创建表需要声明表头和对应的数据类型
日期数据可以直接声明 用日期格式的文本形式写入 - show tabels;
- 查看数据表是否创建成功
- describe {tables name}
- 查看创建好的数据表的结构
- creat table {table name}(
-
如何往数据表中添加数据记录
- INSERT INTO table_name ( field1, field2,…fieldN )
VALUES
( value1, value2,…valueN );
- INSERT INTO table_name ( field1, field2,…fieldN )
mysql> INSERT INTO runoob_tbl
-> (runoob_title, runoob_author, submission_date)
-> VALUES
-> ("学习 MySQL", "菜鸟教程", NOW());
-
数据类型
- MySQL中有数值、日期/时间和字符串(字符)类型三种数据类型
- 数据类型
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yx1k7jfB-1604411144553)(en-resource://database/2389:1)]
- 日期类型
- 日期和时间类型表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rn55qTec-1604411144562)(en-resource://database/2391:1)]
- 字符串类型
- 字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lqr3Z7jR-1604411144564)(en-resource://database/2393:1)]
-
删除表
- DROP TABLE table_name
-
数据记录常见操作
- 增加
INSERT - 删除
DELETE - 修改
UPDATE - 查询
SELECT
- 增加
创建数据表约束
* 主键约束
* 自增约束
* 外键约束
* 唯一约束
* 非空约束
* 莫认约束
- 主键约束
- 能够确定一张表中的一条记录,通过某个字段添加约束,使得该字段不重复不为空
- 使用主键应注意以下几点:每个表只能定义一个主键。
- 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在有相同主键值的两行数据。这是唯一性原则。
- 一个字段名只能在联合主键字段表中出现一次。联合主键不能包含不必要的多余字段。
- 当把联合主键的某一字段删除后,如果剩下的字段构成的主键仍然满足唯一性原则,那么这个联合主键是不正确的。这是最小化原则。
CREATE TABLE tb_emp3
(
id INT(11) PRIMARY KEY,
name VARCHAR(25),
deptId INT(11),
salary FLOAT
);
CREATE TABLE tb_emp4
(
id INT(11),
name VARCHAR(25),
deptId INT(11),
salary FLOAT,
PRIMARY KEY(id)
- 联合主键所谓的联合主键,就是这个主键是由一张表中多个字段组成的
- PRIMARY KEY [字段1,字段2,…,字段n]
CREATE TABLE tb_emp5
(
name VARCHAR(25),
deptId INT(11),
salary FLOAT,
PRIMARY KEY(id,deptId)
);
- 自增约束(与主键约束搭配)
- 自动生成 主键
->creat table user3(
id int primary key auto_increment
name varchar(20)
);
->insert into user3 values('zhangsan')
-
如果创建表的时候忘记创建主键约束
- 可以添加主键约束
- ALTER 修改表结构
- ALTER TABEL user4 ADD primary key(id)
- 删除主键约束
- ALTER TABLE user4 DROP primary key;
- 修改字段,添加主键
- ALTER TABLE uesr4 MODIFY id int primary key;
- 可以添加主键约束
-
唯一约束
- 约束修复字段的值 不重复
CREAT TABLE user5( id int, name varchar(20) );
- 添加唯一约束:
alter talble user5 add unique(name) - 创建表时直接添加:
CREAT TABLE user5( id int, name varchar(20) unique(name) ); -------------------------------------------------- CREAT TABLE user5( id int, name varchar(20) unique ); ********************************* CREAT TABLE user5( id int, name varchar(20) unique(name) );
-
通过modify 的形式添加
- alter table user7 modify name varchar(20) unique;
-
删除唯一约束
- alter table user7 drop index name(添加在name上)
-
总结
-
- 建表的时候添加约束
-
- 使用 alter … add …
-
- alter … add …
-
- 删除alter … drop …
-
-
非空约束
not null- 修饰字段不能为空
CREATE TABLE user9( id INT, name VARCHAR(20) not null ); ## 显示表的基本信息 des user9; INSTER INTO user9 values( 1, 'zhangsan');
-
默认约束
- 当我们插入字段值的时候,如果没有传值,就会使用默认值,,与python函数默认值比较类似
CREATE TABLE user10( id int name varchar(20) age int default 10);
-
外键约束
- 涉及到两个表:父表与子表(主表、附表)
-
CREATE TABLE students( id int primary key, classID int, ); CREATE TABLE students( id int primary key, name varchar(20), classID int, foreign key(classID) reference classesTabele(id) ); ### classID来自于classesTabel表的字段
- 插入数据
insert into classese values(1, '1 class'); insert into classese values(2, '2 class'); insert into classes values(3, '3 class')
insert into students vlaues(1001, 'zhan', 1) insert into students vlaues(1002, 'do', 2) insert into students vlaues(1003, 'zhn', 4) # 最后一句报错,不符合主表中classID的要求
delect from classes where id=2; # 删除主表中的id4,但是报错,由于id2 被子表 students中引用
-
- 主表中 classes 中没有的数据值,再副表中不可以使用
-
- 主表中的记录被附表引用,不可以删除
数据库的设计范式
-
三大设计范式
-
- 第一范式
-
表中的所有字段都是不可分割的原子值
-
CREAT TABLE student( id int primary key, name varchar(20), addtess varchar(20)); ********************************** insert into student values('1', 'zhang', '100 wuhou chengdu zhongguo ') ************************************ select * from student2 ;
-
字段值还可以继续拆分 就不满足第一范式
-
''' CREAT TABLE student( id int primary key, name varchar(20), country varchar(20), city varchar(20), details varchar(20) ); ```
-
- 第二范式
- 在满足第一范式的前提下,第二范式要求,出逐渐外每一列都必须完全依赖主键
- 如果要出现不完全依赖,只可能发生在联合主键下
creat table myoder( product_id int, customer_id int, product_name, varchat(20), costomer_name varchar(20), primary key(product_id, customer_id);
- – 问题
- 除主键外的其他列,只依赖于主键的部分字段
- 拆表
``` creat table myorder( order_id int primary key, product_id varchar(20)), customer_id int); creat table myoder( product_id int primary key, product_name, varchat(20)); creat table myoder( customer_id int, costomer_name varchar(20), primary key(customer_id); ```
-
- 第三范式
- 必须满足第三范式,除开主键列的其他列之间不能用传递依赖关系
creat table myorder( order_id int primary key, product_id varchar(20)), customer_id int costomer_phone varchar(20),); ############# phone 与上述两个均存在依赖关系,关系复杂了 ############# creat table myoder( customer_id int, costomer_name varchar(20), costomer_phone varchar(20), primary key(customer_id); ###