mysql增删改查
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
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号