数据库——02MySQL(DDL&DML)

数据库——02MySQL(DDL&DML)

文章目录

    • 数据库——02MySQL(DDL&DML)
    • 1 DDL
      • 1.1库的管理
      • 1.2 表的管理
      • 1.3 MySQL常用数据类型
      • 1.4 常见约束
    • 2 DML


1 DDL

1.1库的管理

* 创建数据库:
	* create database 数据库名称;
* 创建数据库,判断不存在,再创建:
	* create database if not exists 数据库名称;
* 创建数据库,并指定字符集
	* create database 数据库名称 character set 字符集名;
-------------------------------------------------------------------------	
* 查询所有数据库的名称:
	* show databases;
* 查询某个数据库的字符集:查询某个数据库的创建语句
	* show create database 数据库名称;
-------------------------------------------------------------------------	
*修改数据库的字符集
	* alter database 数据库名称 character set 字符集名称;
-------------------------------------------------------------------------	
* 删除数据库
	* drop database 数据库名称;
* 判断数据库存在,存在再删除
	* drop database if exists 数据库名称;
-------------------------------------------------------------------------	
* 查询当前正在使用的数据库名称
	* select database();
* 使用数据库
	* use 数据库名称;

1.2 表的管理

* 表的创建
	* create tableif exists】表名(
				列名1 数据类型1 【字段约束】,
				列名2 数据类型2 【字段约束】,
				....
				列名n 数据类型n 【字段约束】
			);
	* 注意:最后一列,不需要加逗号(,-------------------------------------------------------------------------	
* 查询当前数据库中所有的表
	* show tables;
* 查询某个数据库中所有的表
	* show tables from 数据库名称;
* 查询表结构
	* desc 表名;
-------------------------------------------------------------------------
* 修改表名
	* alter table 表名 rename to 新的表名;
* 修改表的字符集
	* alter table 表名 character set 字符集名称;
* 添加一列
	* alter table 表名 add 列名 数据类型;
* 修改列名称 类型
	* alter table 表名 change 列名 新列别 新数据类型;
	* alter table 表名 modify 列名 新数据类型;
* 删除列
	* alter table 表名 drop 列名;
-------------------------------------------------------------------------
* 删除表
	* drop table 表名;
	* drop table  if exists 表名;

1.3 MySQL常用数据类型

1.int:整数类型

	age int2. double:小数类型

   score double(5,2)3. date:日期,只包含年月日,yyyy-MM-dd

4. datetime:日期,包含年月日时分秒	 yyyy-MM-dd HH:mm:ss

5. timestamp:时间错类型	包含年月日时分秒	 yyyy-MM-dd HH:mm:ss	

      如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值

6. varchar:字符串

     name varchar(20):姓名最大20个字符

     zhangsan 8个字符  张三 2个字符

1.4 常见约束

  • 概念: 对表中的数据进行限定,保证数据的正确性、有效性和完整性。
  • 分类:
    1. 主键约束:primary key
    2. 非空约束:not null
    3. 唯一约束:unique
    4. 外键约束:foreign key
    5. 默认约束:default,用于保证改字段有默认值
    6. 检查约束:check[mysql中不支持]

添加约束的时机:
1、创建表时
2、修改表时

约束的添加分类:
列级约束:
六大约束语法上都支持,但外键约束没有效果
表级约束:
除了非空、默认,其它的都支持

主键和唯一的大对比:
在这里插入图片描述

外键:

1、要求在从表设置外键关系
2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
3、要求主表的关联列必须是一个key(一般是主键或唯一)
4、插入数据时,先插入主表,再插入从表
删除数据时,先删除从表,再删除主表
-------------------------------------------------------------------------
* 非空约束:not null,某一列的值不能为null,比如学号、姓名等
	1. 创建表时添加约束
		CREATE TABLE stu(
			id INT,
			NAME VARCHAR(20) NOT NULL -- name为非空
		);
	2. 创建表完后,添加非空约束
		ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;

	3. 删除name的非空约束
		ALTER TABLE stu MODIFY NAME VARCHAR(20);
-------------------------------------------------------------------------
* 唯一约束:unique,某一列的值不能重复
	1. 注意:
		* 唯一约束可以有NULL值,但是只能有一条记录为null
	2. 在创建表时,添加唯一约束
		CREATE TABLE stu(
			id INT,
			phone_number VARCHAR(20) UNIQUE -- 手机号
		);
	3. 删除唯一约束
		ALTER TABLE stu DROP INDEX phone_number;
	4. 在表创建完后,添加唯一约束
		ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;
-------------------------------------------------------------------------	
* 主键约束:primary key1. 注意:
		1. 含义:非空且唯一
		2. 一张表只能有一个字段为主键
		3. 主键就是表中记录的唯一标识

	2. 在创建表时,添加主键约束
		create table stu(
			id int primary key,-- 给id添加主键约束
			name varchar(20)
		);

	3. 删除主键
		-- 错误 alter table stu modify id int ;
		ALTER TABLE stu DROP PRIMARY KEY;

	4. 创建完表后,添加主键
		ALTER TABLE stu MODIFY id INT PRIMARY KEY;

	5. 自动增长:
		1.  概念:如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长

		2. 在创建表时,添加主键约束,并且完成主键自增长
		create table stu(
			id int primary key auto_increment,-- 给id添加主键约束
			name varchar(20)
		);
		3. 删除自动增长
			ALTER TABLE stu MODIFY id INT;
		4. 添加自动增长
			ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
-------------------------------------------------------------------------
* 外键约束:foreign key,让表于表产生关系,从而保证数据的正确性。
	1. 在创建表时,可以添加外键
		* 语法:
			create table 表名(
				....
				外键列
				constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
			);

	2. 删除外键
		ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

	3. 创建表之后,添加外键
		ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
	4. 级联操作
			1. 添加级联操作
				语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名称 
						FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE  ;
			2. 分类:
				1. 级联更新:ON UPDATE CASCADE 
				2. 级联删除:ON DELETE CASCADE 
	

2 DML

插入

1. 方式一:
	
语法:
insert into 表名(字段名,...) values(值,....;
特点:
1、要求值的类型和字段的类型要一致或兼容
2、字段的个数和顺序不一定于原始表中的字段个数和顺序一致
但必须保证值和字段一一对应
3、假如表中有为null的字段,注意可以通过以下两种方式插入null值
①字段和值都省略
②字段写上,值使用null
4、字段和值的个数必须一致
5.字段名可以省略,默认所有列

方式二:
语法:
insert into 表名 set 列名=值,列名=值,···

两种方式的区别:
1、方式一支持一次插入多行,方式二不支持
语法如下:
isnert into 表名【(字段名,...)values(值,...)(值,...),...
2、方式一支持子查询,语法如下:
insert into 表名
查询语句;


  1. 删除
* 语法:
		* delete from 表名 [where 条件]
	* 注意:
		1. 如果不加条件,则删除表中所有记录。
		2. 如果要删除所有记录
			1. delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作
			2. TRUNCATE TABLE 表名; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表。
	* 面试题:deleteTRUNCATE区别?
		1.truncate不能加where条件,而delete可以加where条件
		2.truncate的效率高
		3.truncate 删除带自增长的列的表后,如果再插入数据,数据从1开始
		4.delete 删除带自增长列的表后,如果再插入数据,数据从上一次的断点处开始
		5.truncate删除不能回滚,delete删除可以回滚
  1. 修改
* 语法:
		* 修改单表的记录: update 表名 set 列名1 =1, 列名2 =2,... [where 筛选条件];
		* 修改多表的记录:【补充】: update1 别名1,2 别名2 set 字段=新值,字段=新值 where 连接条件 and 筛选条件

	* 注意:
		1. 如果不加任何条件,则会将表中所有记录全部修改

数据库——02MySQL(DDL&DML)_第1张图片

你可能感兴趣的:(数据库,mysql,sql)