Day03-a.m.-SQL-DDL应用

2019-06-17  本文已影响0人  驮着集装箱的鲸鱼

1. SQL介绍

SQL全称是“结构化查询语言(Structured Query Language)”。
SQL语言在关系型数据库中基本上是通用的,只有少许细微偏差。
之所以能够通用,是因为SQL标准:SQL 92、SQL 99
5.7版本之前,没有严格按照SQL标准来执行,这样可能会出现不兼容的情况出现。
到了5.7版本后,加入SQL 92的SQL_Mode严格模式,杜绝了出现不兼容的情况出现。

2. SQL作用

SQL的基本作用是专门用来管理和操作MySQL内部的对象
那么什么是对象呢?
就是数据库里面的“库”和“表”。
库的属性:库名、库属性
表的属性:表名、表属性、列、记录(行)、列属性、约束

3. SQL语句的类型

常用的为以下4类:

DDL(Data Definition Language):数据模式定义语言
DCL(Data Control Language):数据控制语言
DML(Data Manipulation Language):数据模式操作语言
DQL(Data Query Language):数据模式查询语言

4. 数据类型

4.1 数据类型的基本作用

控制数据的规范性,让数据有具体含义,它是在列上面进行控制的。

4.2 数据类型的种类(常用)

4.2.1 字符串

char:固定长度

char(32):固定长度32个字符。存储数据时,一次性提供32字符长度的存储空间,如果存不满,用空格代替,直到32字符长度用完为止。

varchar:可变长度

varchar(32):可变长度的32个字符长度。存数据时,首先进行字符串长度判断,比如需存储32个字符串,只会分配32个字符长度的存储空间,并且会单独占用一个字节来记录此次的字符长度。也就是32+1。
字符长度超过255之后,需要2个字节长度记录字符长度。

面试题:(重点)

简单版:

1. char和varchar的区别?

参考上面的就行。
char(255):定长(固定存储空间)
varchar(65535):变长(按需求分配)

困难版:

2. char和varchar如何选择?

(1)char类型:固定长度的字符串列,如手机号、身份证号、银行卡号、性别等。
(2)varchar类型:不确定长度的字符串,可以使用。为什么呢?
会影响到索引的高度。

enum:枚举类型

enum('bj','sh','cq','hb',……)#值只能是括号里面的这些
定义完值之后,会自动产生枚举下标(下标索引):1 2 3 4 ……,分别对应括号里面的值。
在数据行比较多时,会影响到索引的应用
注意:数字类禁止使用

4.2.2数字(不需要定义长度)

1. tinyint

最多存储3位数(0-255)

2. int

最多存储10位数(-2^31-2^31-1)

4.2.3 时间

1. timestamp

1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.9999999

2. datetime

1000-01-01 00:00:000000 至 9999-12-31 23:59:59 .999999

4.2.4 二进制

5. 表属性

5.1.1 存储引擎设定

engine

engine = InnoDB

5.1.2 字符集设定

charset

charset = utf8mb4

utf8与utf8mb4的区别:

utf8 存储中文是 3个字节长度。
utf8mb4存储中文是4个字节长度,才是真正的utf8。
8.0版本的数据库以后默认就是utf8mb4。
utf8mb4还支持emoji字符(表情字符)。
而且每个字符及都会有一个排序规则(校对规则,collation),主要是针对英文字符串大小写问题。

6. 列的属性和约束

属性:
(1)主键(primary key\PK):

值必须是唯一的,而且不能为空。
数字列、整数列、无关列、自增的,比较适合设置主键。
凡是设置了主键的,都为聚集索引列。
算是一种约束,也是一种索引类型,在一个表中,只能有一个主键。
主键一定要在创建表之前就设定好。

思考什么是聚集索引列?什么是无关列?

(2)非空(Not NULL):

不能为空。建议:对于普通列来讲,尽量设置为非空(not null)

(3)默认值(default):

数字列的默认值使用0。字符串类型,设置为null或nil

(4)唯一(unique):

不能重复,但可以为空,可以有多个空值,它不会对空值进行匹配

(5)自增(auto_increment)

针对数字列,自动生成顺序值。如123456,13579,2468 10

(6)无符号(unsigned)

针对数字列

(7)注释(comment)

描述

(8)默认(default)

7. SQL语句应用

7.1 DDL:数据定义语言(对库、表定义。建库、改库、删库)

定义数据库:

建库

3306 [(none)]>create database oldguo charset utf8mb4;

查库(不算DDL类型的,查库操作是属于DQL类型的)

3306 [(none)]>show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| oldguo             |
| performance_schema |
| sys                |
| world              |
| zhihu              |
+--------------------+
7 rows in set (0.12 sec)

3306 [(none)]>show create database oldguo;
+----------+--------------------------------------------------------------------+
| Database | Create Database                                                    |
+----------+--------------------------------------------------------------------+
| oldguo   | CREATE DATABASE `oldguo` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
+----------+--------------------------------------------------------------------+
1 row in set (0.00 sec)

改库
改字符集:

3306 [(none)]>show create database oldboy1;
+----------+--------------------------------------------------------------------+
| Database | Create Database                                                    |
+----------+--------------------------------------------------------------------+
| oldboy1  | CREATE DATABASE `oldboy1` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+--------------------------------------------------------------------+
1 row in set (0.00 sec)

3306 [(none)]>alter database oldboy1 charset utf8mb4;
Query OK, 1 row affected (0.00 sec)

3306 [(none)]>show create database oldboy1;
+----------+---------------------------------------------------------------------+
| Database | Create Database                                                     |
+----------+---------------------------------------------------------------------+
| oldboy1  | CREATE DATABASE `oldboy1` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
+----------+---------------------------------------------------------------------+
1 row in set (0.00 sec)

删库(生产中禁止):

3306 [(none)]>drop database oldboy1;
Query OK, 0 rows affected (0.03 sec)

7.1.2 表(建表、改表、删表)

建表建库规范:

1、库名与表名必须是小写字母,因为开发和生产平台不同,可能会出问题。如windows系统不区分大小写,Linux中严格区分大小写。
2、不能以数字和特殊符号开头。
3、不支持- 支持_。
4、不能有内部函数名(如表名为inta,database)。
5、不能有名字和业务功能有关(his,jf,yz,oss,erp,crm)。

(1)建表

create table oldguo (
ID int not null primary key AUTO_INCREMENT comment '学号',
name varchar(255) not null comment '姓名',
age tinyint unsigned not null default 0 comment '年龄',
gender enum('m','f','n') not null default 'n' comment '性别'
)charset=utf8mb4 engine=innodb;

如果不知道如何写SQL语句,就使用help create database;

上一篇 下一篇

猜你喜欢

热点阅读