SQL系列之DDL/DCL语言

栏目: 数据库 · 发布时间: 4年前

内容简介:SQL语言主要分为以下四类:数据定义语言(DDL):用于下定义和管理数据对象(库,表,索引,视图),包括数据库,数据表等,例如:CREATE DROP ALTER等语句。
编辑推荐:
本文来自于个人博客,本文主要通过了解增删改查的增删改 ,增删改查的查之简单查询 ,增删改查的查之高级查询介绍DDL和DCL语言,希望对您的学习有所帮助。

SQL语言主要分为以下四类:

数据定义语言(DDL):

用于下定义和管理数据对象(库,表,索引,视图),包括数据库,数据表等,例如:CREATE DROP ALTER等语句。

数据操作语言(DML):

用于操作数据库对象中包含的数据,例如:INSERT UPDATE DELETE语句。

数据查询语言(DQL):

用于查询数据库对象中包含的数据,能够进行单表查询,连接查询,嵌套查询,以及集合查询等各种复杂不同的数据库查询,并将数据返回到客户机中显示,例如:SELECT语句。

数据控制语言(DCL):

用于管理数据库的语言,包含管理权限及数据更改,例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。

SQL语言通用规则:

1. 数据库对关键字的大小写不敏感,不包括数据,一般是关键字大写

2.SQL语言以分号结尾,只认分号(;),没有分号(;)数据库就会认为语句未结束

3.SQL语言可以分行写,以分号结尾

4.对空格敏感,每一个命令都空格分开

5.对数据可以使用单引号,也可以使用双引号,但必须配对使用

1.使用命令提示符登录mysql

(1)一般使用的是,默认就是3306和本机

mysql -u用户名 -p密码

例如:mysql -uroot -p123456

(2)如果端口号不是默认的,主机不是本机

格式:mysql -u用户名 -p密码 -h 主机地址 -P 端口号

例如:mysql -uroot -p123456 -h localhost -P 3307

例如:mysql -uroot -p123456 -h 192.168.2.83 -P 3307

2.查看数据库中的所有库名称

show databases;

3.选择库

use 库名称

例如:use mysql;

4.查看库的所有表

show TABLES;

5.mysql库中user表为用户表,包含 mysql 中所有的用户

user表字段解析:

Host 字段 -----主机地址,表示该用户能在什么地方进行登录

localhost ---本机

127.0.0.1 ---本机,指IPv4----TCP/IP

::1 -----本机,指IPv6

表示root只能本机登录,不能远程登录

192.168.2.92----指仅能通过此IP登录,任意IP

%-----指所有机器都能登录

User ----用户名

一个用户可以创建多个host

Password---密码

加密后的密文

为空的表示没密码

CREATE---创建库/用户

CREATE可以创建库,创建表,创建用户

(1)创建库

格式: CREATE DATABASE 库名;

mysql> CREATE DATABASE test_k;

(2)创建用户

1.创建默认用户

格式: CREATE USER username;

创建用户最简单的命令

mysql> CREATE user test_k;

表数据显示为:

host user password

% test_k

创建出来的用户,host为%,没有密码

2.创建用户,并指定密码

格式: CREATE USER username IDENTIFIED BY "PASSWORD";

mysql> CREATE user test_c identified by "123456";

表数据显示为:

host user password

% test_c *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9

3.创建用户的同时指定host和密码

mysql> CREATE user 'test_t'’@'192.168.2.91‘' identified by '123456'‘;

4.创建一个用户test1,密码为123456,该用户可以在任意机器上登录

CREATE USER 'test1'@'%' identified by '123456';

==CREATE USER test1 identified by '123456';

CREATE TABLE----创建表

(1)创建表

公式: CREATE TABLE 表名( 字段名称1 数据类型 [属性][约束],

字段名称2 数据类型 [属性][约束],

字段名称3 数据类型 [属性][约束],

......

字段名称n 数据类型 [属性][约束],

);

(表名和字段名称是标识符,自己命名的)

mysql> CREATE TABLE student(id int PRIMARY KEY,

-> name varchar(10),

-> sex varchar(5),

-> age int(10),

-> addr varchar(30));

(2)查看表结构

DESC 表名;

(3)数据类型

原文链接:https://www.w3cschool.cn/mysql/mysql-data-types.html

数值类型:

SQL系列之DDL/DCL语言

文本类型:

SQL系列之DDL/DCL语言

日期类型:

SQL系列之DDL/DCL语言

(4)属性

(1).unsigned---- 无符号型

tinyint---值的范围(-128-127) 有符号位

无符号的范围(0-255)

CREATE TABLE t1(id tinyint(10));

CREATE TABLE t2(id tinyint(10) unsigned);

mysql> DESC t1;

+-------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id | tinyint(10) | YES | | NULL | |

+-------+-------------+------+-----+---------+-------+

mysql> DESC t2;

+-------+----------------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+----------------------+------+-----+---------+-------+

| id | tinyint(10) unsigned | YES | | NULL | |

+-------+----------------------+------+-----+---------+-------+

1.向t1表中插入数据129

insert into t1(id) values(129);

ERROR 1264 (22003): Out of range value for column 'id' at row 1

2.向t2表中插入数据-11

insert into t2(id) values(-11);

ERROR 1264 (22003): Out of range value for column 'id' at row 1

(2) 自动补全--zerofill

字段设为zerofill时,自动为unsigned,且只能是数值类型

zerofill,unsigned只对数值类型的字段有效,且为整型

mysql> CREATE TABLE t1(id int zerofill);

mysql> DESC t1;

+-------+---------------------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------------------------+------+-----+---------+-------+

| id | int(10) unsigned zerofill | YES | | NULL | |

+-------+---------------------------+------+-----+---------+-------+T

mysql> insert into t1(id) values(12);

mysql> select * from t1;

+------------+

| id |

+------------+

| 0000000012 |

+------------+

(3)自动递增---auto increment

字段为auto_increment时,字段必须为主键

mysql> CREATE TABLE t1(id int auto_increment PRIMARY KEY,name varchar(10));

mysql> DESC t1;

+-------+---------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+----------------+

| id | int(11) | NO | PRI | NULL | auto_increment |

+-------+---------+------+-----+---------+----------------+

1.插入数据时,可以不插入相应数据(空值 ),但是该字段的值为自动递增,即是在最大值 上加1

INSERT INTO t1 (name) values("test");

2.数据如果是delete了,自动递增的计数器并不会清零,而会根据以前的最大值 再加1

3.插入数据时,id插入为null,0时,该字段还是自动递增,在最大值上加1

用法:流水号,学号等

1.不能空,唯一

auto_increment 必须为PRIMARY KEY(唯一+不能空)

2.计数器,值会自动递增

(4) null and not null--空和不为空

创建表时,null是默认为YES,表示该字段在插入数据时,可以为null(空)

eg:

INSERT INTO t3 VALUES (1,"TEST");

INSERT INTO t3(NUM) VALUES (2);

mysql> DESC t3;

+-------+------------------------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+------------------------------+------+-----+---------+-------+

| num | tinyint(3) unsigned zerofill | YES | | NULL | |

| name | varchar(10) | YES | | NULL | |

+-------+------------------------------+------+-----+---------+-------

B.NOT NULL--不为空

CREATE TABLE t4 (num tinyint not null,

name varchar(10) not null,

age int(3));

mysql> DESC t4;

+-------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| num | tinyint(4) | NO | | NULL | |

| name | varchar(10) | NO | | NULL | |

| age | int(3) | YES | | NULL | |

+-------+-------------+------+-----+---------+-------+

例如:不给num字段插入数据

INSERT INTO T4(name,age) values("test",24);

1364 - Field 'num' doesn't' have a default value

提示"num"没有默认值 ,在插入数据时必须输入数据

(5)DEFAULT-----默认值

CREATE TABLE t5(id int unsigned auto_increment PRIMARY KEY,

name varchar(10) not null default " ",

age int(3) not null default 0,

address varchar(30) );

(6)PRIMARY KEY----主键 :

1,唯一

2.不能为空

一个表中只有一个主键

(7)UNIQUE--- 唯一

数据不能重复

NOT NULL + UNIQUE = PRIMARY KEY

一个表中可以有多个UNIQUE

CREATE TABLE t6(id int PRIMARY KEY,

name varchar(10) unique,

age int(2) not null,

phone int(10) not null unique);

例如:向name字段插入重复的值

INSERT INTO t6(id,name,age,phone) values (2,"tester",24,"13410000000");

1062 - Duplicate entry 'tester' for key 'name'

以上只是一部分经常使用到的属性和约束,并不完整。

(7)IF NOT EXIST

CREATE TABLE [IF NOT EXISTS] 表名(字段名1 数据类型 [属性] [约束],

字段名2 数据类型 [属性] [约束])[表类型][字符集];

例如:库中已经存在t1表,再次插入t1表

mysql> CREATE TABLE t1(id int);

1050 - TABLE 't1' already exists

mysql> CREATE TABLE if not exists t1(id int);

Query OK, 0 rows affected

if not exists 在创建表时判断表是否存在,如果存在,执行通过不报错,但也不创建表,

如果表不存在,执行通过不报错,同时创建表

推荐:在创建时,最好加上判断

GRANT-权限

1.查看权限

(1)查看权限:

SHOW GRANTS;

(2)查看当前用户的权限

SELECT USER(); ---查看当前所在的用户

(3)查看其它用户的权限

SHOW GRANTS FOR 用户名;

例如:SHOW GRANTS FOR test; ---查看test用户的权限

(4)展示权限解析:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost'

IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9'

WITH GRANT OPTION

a.ALL PRIVILEGES----表示所有权限

b.ON*.* ---表示所有库.所有表 *表示所有

c. TO 'root'@'localhost'---表示哪个用户,这里指是root

d. IDENTIFIED BY PASSWORD

'*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' ---表示该用户访问的密码

e.WITH GRANT OPTION ---可以赋权

(5)USAGE---无权限

2.赋权

格式:

1.只赋权

GRANT 权限1,权限2,权限3,.....权限n ON *.* TO "username"@"host";

2.赋权并修改密码

GRANT 权限1,权限2,权限3,.....权限n ON *.* TO "username"@"host" IDENTIFIED BY "password";

1.给test_k赋select,insert,UPDATE权限

GRANT select,insert,UPDATE on *.* to 'test_k'@'%';

2.给test_k这个用户针对test库赋所有权限

GRANT ALL PRIVILEGES on test.* to 'test_k'@'%';

REVOKE-回收权限

公式: REVOKE 权限1,权限2,权限3,.....权限n ON *.* FROM "username"@"host";

REVOKE select on *.* from 'test_k'@'%';

revoke ---回收权限

on---表示范围

from ---表示从谁那里收权限

修改密码

(1)在命令提示窗口输入

在修改密码时,必须知道旧密码

mysqladmin -u用户名 -p旧密码 password 新密码 -P 端口号

(端口号不是3306,要加-P参数)

(2)修改user表中的用户密码(在mysql中修改的,所以必须事先进行登录)

UPDATE mysql.user SET password=password("123456")

WHERE user="test_t";

(3)SET password

1.修改当前用户的密码,要先登录,也要知道原密码

mysql> SET password = password("123456");

2.修改其它用户的密码

一般只有root用户才有权限,必须要知道root用户的密码

mysql> SET password for test_k = password("1234567");

mysql> SET password for test@192.168.2.92= password("987456");

修改密码,要么要知道该用户的密码,要么要知道root用户的密码

如果root用户的密码忘记了,只能改配置文件

DROP-删库,删表,删用户

DROP 命令慎用

(1)删除库

DROP DATABASE 库名;

(2)删除表

DROP TABLE [IF EXISTS] 表名;

删除多张表:

DROP TABLES 表1,表2…;

(3)删除用户

DROP USER 用户名;

1.host为%

mysql> DROP USER test_c;

2.host不为%,为IP,域名

DROP USER "username"@"host";

DROP USER 'test_t'@'192.168.2.83';

3.直接删除mysql.user表中的数据,也是删除用户

DELETE FROM mysql.user WHERE user="test";

ALTER -修改表结构

(1)修改表的名称

mysql> ALTER TABLE t6 RENAME AS student;

(2)修改表字段的数据类型

ALTER TABLE 表名 MODIFY 列名称 新的数据类型;

mysql> ALTER TABLE student modify phone varchar(11);

(3)修改表字段名称

ALTER TABLE 表名 CHANGE 旧列名称 新列名称 数据类型

mysql> ALTER TABLE student CHANGE name username varchar(10);

新列名称的数据类型,可以同时修改

(4)增加字段

ALTER TABLE 表名 ADD 列名称 数据类型 [完整属性] [约束] [first/after 列名称2];

1.如果不指定顺序,默认新增到最后

ALTER TABLE student ADD address varchar(30) not null default " chengdu";

2.将新增字段添加到最前面

ALTER TABLE student ADD s_id int auto_increment PRIMARY KEY FIRST;

3.将新增字段添加到username后面

ALTER TABLE student ADD sex varchar(5) not null after username;

(5)删除字段

ALTER TABLE 表名 DROP 列名称;

在实际工作中一般表中有大量的数据,在修改表结构会导致数据的丢失或者串行,所以一般不建议使用ALTER命令

相关文章
我们该如何设计数据库
数据库设计经验谈
数据库设计过程
数据库编程总结
相关文档
数据库性能调优技巧
数据库性能调整
数据库性能优化讲座
数据库系统性能调优系列
相关课程
高性能数据库设计与优化
高级数据库架构师
数据仓库和数据挖掘技术
Hadoop原理、部署与性能调优

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

高性能网站建设指南(第二版)

高性能网站建设指南(第二版)

Steve Souders / 刘彦博 / 电子工业出版社 / 2015-5 / 55.00元

《高性能网站建设指南:前端工程师技能精髓》结合Web 2.0以来Web开发领域的最新形势和特点,介绍了网站性能问题的现状、产生的原因,以及改善或解决性能问题的原则、技术技巧和最佳实践。重点关注网页的行为特征,阐释优化Ajax、CSS、JavaScript、Flash和图片处理等要素的技术,全面涵盖浏览器端性能问题的方方面面。在《高性能网站建设指南:前端工程师技能精髓》中,作者给出了14条具体的优化......一起来看看 《高性能网站建设指南(第二版)》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具