1.回顾:
1.MySQL默认端口号是多少? 3306
2.MySQL中的超级用户叫什么? root
3.创建数据库的语句? CREATE DATABASE JD CHARSET=utf8;
4.修改数据库的语句? alter database 库名 charset=utf8;
5.删除数据库的语句? DROP DATABASE JD;
6.查看数据库的语句? SELECT DATABASE();
2.数据表:
数据库是由数据表组成的,数据是存在数据表里的。
4.使用数据库:
USE python;
5.创建表:
-- create table 表名(字段名 类型名 约束);
create table classes(
id int unsigned auto_increment primary key,
name varchar(20) not null
);
create table students (
id int unsigned auto_increment primary key,
name varchar(30) not null,
age tinyint unsigned default 0,
high decimal(5,2),
gender enum("男", "女", "中性", "保密") default "保密",
cls_id int unsigned,
foreign key(cls_id) references classes(id)
);
insert classes values(0,"网工1706a"),(0,"网工1705a");
6.查看数据表:
SHOW TABLES; --查看所有的表
DESC students; --查看表结构
SHOW CREATE TABLE classes; --查看创表语句
7.删除表:
DROP TABLE classes;
8.增删改查(curd):
1.插入记录:
-- INSERT [INTO] 表名 [(列名,....)] VALUES(数据,......);
-- 全列插入
-- insert 表名 values (...)
insert students values(0,"张三",20,175,"男",1);
-- 部分插入
-- insert into 表名(列1,...) values(值1,...)
insert students (name,high) values ("王二", 173);
-- 多行插入
insert students (name, high) values ("刘备", 160),("张飞", 178);
2.记录查找:
-- SELECT 列名,.... FROM 表名 [ WHERE 条件]
1.查询所有列
-- select * from 表名;
-- 注意 :“ * ” 号可以表示所有字段(列)
select * from students;
2.指定条件查询
-- 条件可以使用 > < >= <= AND OR
select * from students where age > 21;
-- 查询名字中带有 "王" 字的所有人信息:
select * from students where name like "%王%";
-- 查询id小于3且年龄等于20的所有人信息:
select * from students where id<3 and age=20;
3.查询指定列
-- select 列1,列2,... from 表名;
select name, gender from students;
select gender, name from students;
4.可以使用as为列或表指定别名
-- select 列1【 as 名字】,列2【 as 名字】,... from 表名;
select name as ‘姓名‘, gender as ‘性别‘ from students;
3.修改:
-- update 表名 set 列1=值1,列2=值2... where 条件
-- 把id为1的同学,年龄改为10,性别改为保密
update students set age=10,gender=4 where id=1;
-- 将所有人的年龄增加1:
update students set age=age+1;
4.删除:
1.物理删除
-- 基本用法为:
delete from 表名称 where 删除条件;
-- 删除id为2的行:
delete from students where id=2;
-- 删除所有年龄小于20岁的数据:
delete from students where age<20;
-- 删除表中的所有数据:
delete from students;
2.逻辑删除
-- 用一个字段来表示 这条信息是否已经不能再使用了
-- alter table students add is_delete bit default 0;
update students set is_delete=1 where id=5;
9.表结构的修改:
1.添加字段
-- alter table 表名 add 列名 列数据类型 [after 插入位置];
-- 示例:
-- alter table 表名 add 列名 类型;z‘//‘1‘
-- 在名为 age 的列后插入列 address:
alter table students add birthday datetime after age;
2.删除字段
-- alter table 表名 drop 列名;
alter table students drop high;
3.修改字段:不重命名版
-- alter table 表名 modify 列名 类型及约束;
alter table students modify birthday date;
4.修改字段:重命名版
-- alter table 表名 change 原名 新名 类型及约束;
alter table students change birthday birth date;
5.表格重命名:
基本形式:
-- alter table 表名 rename 新表名;
示例:
-- 重命名 students 表为 workmates:
alter table students rename workmates;
10.表的约束:确保表中数据的完整性,唯一性
常用7种约束:
unsigned: 无符号约束,指定数字不能为负数
-- 数字(整数,小数)
not null: 非空约束,指定某列不为空
auto_increment: 自动增长约束,序号自动加一
-- 注意:必须与主键组合使用
-- 默认情况下,初始值为1,每次增量为1
unique: 唯一约束,指定某列和几列组合的数据不能重复
-- 唯一约束可以保证记录的唯一性
-- 唯一约束的字段可以为空值(NULL)
-- 每张数据表可以存储多个唯一约束
primary key: 主键约束,指定某列的数据不能重复、唯一
-- 每张数据表只能存在一个主键
-- 主键保证记录的唯一性
-- 主键自动为NOT NULL
foreign key: 外键,指定该列记录属于主表中的一条记录,参照另一条数据
default 0: 当插入数据的时候,如果字段没有数据,则自动插入默认值
11.备份和恢复:(了解)
-- 数据库的备份
mysqldump -uroot -p python > python.sql;
-- 恢复
-- 先建一个新的数据库 create database newpython charset=utf8;
mysql -uroot -p newpython < python.sql;
12.数据库设计:(了解)
三范式:(数据库设计一般要遵守3范式,但不是必须要遵守)
-- 第一范式(1NF): 强调的是列的原子性,即列不能够再分成其他几列。
(姓名,性别,电话)
(姓名,性别,家庭电话,公司电话)
-- 第二范式(2NF): 首先是 1NF,另外包含两部分内容,一是表必须
-- 有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能
-- 只依赖于主键的一部分。
【OrderDetail】(OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName)
【OrderDetail】(OrderID,ProductID,Discount,Quantity)
【Product】(ProductID,UnitPrice,ProductName)
-- 第三范式(3NF): 首先是2NF,另外非主键列必须直接依赖于主
-- 键,不能存在传递依赖。即不能存在:非主键列A依赖于非主键列B,
-- 非主键列B依赖于主键的情况。
【Order】(OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)
【Orde444444444444444445555555555555555555555555555555555555555545454554544