Linux下—sql语句分类

SQL语句分类:

  • DDL: Data Defination Language 数据定义语言

CREATE, DROP, ALTER

  • DML: Data Manipulation Language 数据操纵语言

INSERT, DELETE, UPDATE 增 删 改

  • DCL: Data Control Language 数据控制语言

GRANT, REVOKE, COMMIT, ROLLBACK

  • DQL: Data Query Language 数据查询语言

SELECT

SQL语句构成

SQL语句构成:

Keyword组成clause

多条clause组成语句

示例:

  • SELECT * SELECT子句
  • FROM products FROM子句
  • WHERE price>400 WHERE子句
  • 说明:一组SQL语句,由三个子句构成, SELECT,FROM和WHERE是关键字

数据库操作

创建数据库:

  • CREATE DATABASE|SCHEMA [IF NOT EXISTS] 'DB_NAME';
  • CHARACTER SET 'character set name'
  • COLLATE 'collate name'

help creart database ##获取创建数据库的帮助

删除数据库

  • DROP DATABASE|SCHEMA [IF EXISTS] 'DB_NAME';

查看支持所有字符集: SHOW CHARACTER SET;

  • MariaDB [(none)]> show character set;

查看支持所有排序规则: SHOW COLLATION;

  • MariaDB [(none)]> show collation;

获取命令使用帮助:

  • mysql> HELP KEYWORD;
例子:create database db1;
MariaDB [(none)]> show create database db1;					##查看创建的db1书记库的默认字符集
+----------+----------------------------------------------------------------+
| Database | Create Database                                                |
+----------+----------------------------------------------------------------+ 
| db1      | CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+----------------------------------------------------------------+
MariaDB [(none)]> creart database db2  character set=utf8mb4;	##添加数据库字符集
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| db2      | CREATE DATABASE `db2` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
+----------+-----------------------------------------------------------------+

表:二维关系 横行 、纵列

设计表:遵循规范

定义:字段,索引

字段:字段名,字段数据类型,修饰符

约束,索引:应该创建在经常用作查询条件的字段上

创建表

创建表: CREATE TABLE

(1) 直接创建

(2) 通过查询现存表创建;新表会被直接插入查询而来的数据

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

[(create_definition,...)] [table_options]

[partition_options] select_statement

(3) 通过复制现存的表的表结构创建,但不复制数据

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name { LIKE old_tbl_name | (LIKE old_tbl_name) }

注意:

  1. Storage Engine是指表类型,也即在表创建时指明其使用的存储引擎,同一库中不同表可以使用不同的存储引擎
  2. 同一个库中表建议要使用同一种存储引擎类型

CREATE TABLE [IF NOT EXISTS] ‘tbl_name’ (col1 type1 修饰符, col2

type2 修饰符, ...)

字段信息

• col type1 字段名 类型

• PRIMARY KEY(col1,...)

• INDEX(col1, ...)

• UNIQUE KEY(col1, ...)

表选项:

• ENGINE [=] engine_name

SHOW ENGINES;查看支持的engine类型

• ROW_FORMAT [=]

{DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}

获取帮助: mysql> HELP CREATE TABLE;

获取帮助: mysql> HELP CREATE TABLE;

一、数据类型

  • 数据长什么样?
  • 数据需要多少空间来存放?

二、系统内置数据类型和用户定义数据类型

三、MySql支持多种列类型:

  • 数值类型
  • 日期/时间类型
  • 字符串(字符)类型

https://dev.mysql.com/doc/refman/5.5/en/data-types.html

数据类型有哪些?

1、整型

  • tinyint(m) 1个字节 范围(-128~127)
  • smallint(m) 2个字节 范围(-32768~32767)
  • mediumint(m) 3个字节 范围(-8388608~8388607)
  • int(m) 4个字节 范围(-2147483648~2147483647)
  • bigint(m) 8个字节 范围(+-9.22*10的18次方)

加了unsigned,则最大值翻倍,如: tinyint unsigned的取值范围为(0~255)int(m)里的m是表示SELECT查询结果集中的显示宽度,并不影响实际的取值范围,规定了MySQL的一些交互工具(例如MySQL命令行客户端)用来显示字符的个数。对于存储和计算来说, Int(1)和Int(20)是相同的

2、BOOL, BOOLEAN:布尔型, 是TINYINT(1)的同义词。 zero值被视为假,非zero值视为真

3、浮点型(float和double),近似值

  • float(m,d) 单精度浮点型 8位精度(4字节) m总个数, d小数位
  • double(m,d) 双精度浮点型16位精度(8字节) m总个数, d小数位
  • 设一个字段定义为float(6,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位

4、定点数

  • 在数据库中存放的是精确值,存为十进制
  • decimal(m,d) 参数m<65 是总个数, d<30且 d<m 是小数位
  • MySQL5.0和更高版本将数字打包保存到一个二进制字符串中(每4个字节存9个数字)。例如, decimal(18,9)小数点两边将各存储9个数字,一共使用9个字节:小数点前的数字用4个字节,小数点后的数字用4个字节,小数点本身占1个字节
  • 浮点类型在存储同样范围的值时,通常比decimal使用更少的空间。 float使用4个字节存储。 double占用8个字节
  • 因为需要额外的空间和计算开销,所以应该尽量只在对小数进行精确计算时才使用decimal——例如存储财务数据。但在数据量比较大的时候,可以考虑使用bigint代替decimal

5、字符串(char,varchar,_text)

  • char(n) 固定长度,最多255个字符
  • varchar(n) 可变长度,最多65535个字符
  • tinytext 可变长度,最多255个字符
  • text 可变长度,最多65535个字符
  • mediumtext 可变长度,最多2的24次方-1个字符
  • longtext 可变长度,最多2的32次方-1个字符
  • BINARY(M) 固定长度,可存二进制或字符,长度为0-M字节
  • VARBINARY(M) 可变长度,可存二进制或字符,允许长度为0-M字节
  • 内建类型: ENUM枚举, SET集合

char和varchar:

  • • 1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格, varchar不限于此。
  • • 2.char(n) 固定长度, char(4)不管是存入几个字符,都将占用4个字节, varchar是存入的实际字符数+1个字节(n< n>255),所以varchar(4),存入3个字符将
  • 占用4个字节。
  • • 3.char类型的字符串检索速度要比varchar类型的快

varchar和text:

  • • 1.varchar可指定n, text不能指定,内部存储varchar是存入的实际字符数+1个字节(n< n>255), text是实际字符数+2个字节。
  • • 2.text类型不能有默认值
  • • 3.varchar可直接创建索引, text创建索引要指定前多少个字符。 varchar查询速度快于text

5.二进制数据: BLOB

  • • BLOB和text存储方式不同, TEXT以文本方式存储,英文存储区分大小写,而Blob是以二进制方式存储,不分大小写
  • • BLOB存储的数据只能整体读出
  • • TEXT可以指定字符集, BLOB不用指定字符集

6.日期时间类型

  • • date 日期 '2008-12-2'
  • • time 时间 '12:25:36'
  • • datetime 日期时间 '2008-12-2 22:06:44'
  • • timestamp 自动存储记录修改时间 ##时间戳
  • • YEAR(2), YEAR(4):年份

timestamp字段里的时间数据会随其他字段修改的时候自动刷新,这个数据类型的字段可以存放这条记录最后被修改的时间

修饰符

所有类型:

  • • NULL 数据列可包含NULL值
  • • NOT NULL 数据列不允许包含NULL值
  • • DEFAULT 默认值
  • • PRIMARY KEY 主键
  • • UNIQUE KEY 唯一键
  • • CHARACTER SET name 指定一个字符集

数值型

• AUTO_INCREMENT 自动递增,适用于整数类型

• UNSIGNED 无符号

(1) 直接创建

例子:

MariaDB [db1]> create table students (			        ###创建表
 id int unsigned auto_increment primary key, 
name varchar(50) not null,
 sex enum('f','m'), 
age tinyint unsigned default 20 );
MariaDB [db1]> show create table students;			##查看创建表的信息
 students | CREATE TABLE `students` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `sex` enum('f','m') DEFAULT NULL,
  `age` tinyint(3) unsigned DEFAULT '20',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
MariaDB [db1]> desc students;
+-------+---------------------+------+-----+---------+----------------+
| Field | Type                | Null | Key | Default | Extra          |
+-------+---------------------+------+-----+---------+----------------+
| id    | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
| name  | varchar(50)         | NO   |     | NULL    |                |
| sex   | enum('f','m')       | YES  |     | NULL    |                |
| age   | tinyint(3) unsigned | YES  |     | 20      |                |
+-------+---------------------+------+-----+---------+----------------+

复合主键

CREATE TABLE students2 (id int UNSIGNED NOT NULL ,name

VARCHAR(20) NOT NULL,age tinyint UNSIGNED,PRIMARY KEY(id,name));

(2) 通过查询现存表创建;新表会被直接插入查询而来的数据

MariaDB [hellodb]> show tables;		查看表列表
+-------------------+
| Tables_in_hellodb |
+-------------------+
| classes           |
| coc               |
| courses           |
| scores            |
| students          |
| teachers          |
| toc               |
+-------------------+
MariaDB [hellodb]> select * from students;		##查看表内容
MariaDB [hellodb]> create table newstudents select * from students;
MariaDB [hellodb]> select * from newstudents;	##查看表内容
+-------+---------------+-----+--------+---------+-----------+
| StuID | Name          | Age | Gender | ClassID | TeacherID |
+-------+---------------+-----+--------+---------+-----------+
|     1 | Shi Zhongyu   |  22 | M      |       2 |         3 |
|     2 | Shi Potian    |  22 | M      |       1 |         7 |
|     3 | Xie Yanke     |  53 | M      |       2 |        16 |
|     4 | Ding Dian     |  32 | M      |       4 |         4 |
|     5 | Yu Yutong     |  26 | M      |       3 |         1 |
|     6 | Shi Qing      |  46 | M      |       5 |      NULL |
|     7 | Xi Ren        |  19 | F      |       3 |      NULL |
|     8 | Lin Daiyu     |  17 | F      |       7 |      NULL |
|     9 | Ren Yingying  |  20 | F      |       6 |      NULL |
|    10 | Yue Lingshan  |  19 | F      |       3 |      NULL |
|    11 | Yuan Chengzhi |  23 | M      |       6 |      NULL |
MariaDB [db1]> create table newstudents select * from hellodb.students;	##跨数据库建表

(3) 通过复制现存的表的表结构创建,但不复制数据、

MariaDB [db1]> create table test like newstudents;
或者
MariaDB [db1]> create table test2 select * from hellodb.students where 1 = 0;
都可以实现只负责复制表结构不复制表内容的效果。

猜你喜欢

转载自blog.csdn.net/weixin_42741132/article/details/82960369
今日推荐