天天看點

SQL基礎手冊--結構化查詢語言概念、mysql資料庫管理系統為例【sql分類、資料完整性、SQL運算符、配置設定操作符(指派操作符,案例排名)、sql函數、SQL語句(SQL增删改查)】1、SQL語言的概念:2、sql的分類3、DDL操作,資料定義語言4、資料完整性5、SQL運算符、配置設定操作符(指派操作符)6、DML操作,資料操作語言7、DQL操作,資料查詢語言8、sql函數

目录

1、SQL语言的概念:

2、sql的分类

3、DDL操作,数据定义语言

3.1、数据库操作

创建数据库:

销毁(删除)数据库:

3.2、数据类型及表操作

数据类型:

创建表:

修改表结构:

4、数据完整性

4.1 实体完整性

主键约束(primary key)

唯一约束(unique)

主键自增(auto_increment)

4.2 域完整性

非空约束(not null)

默认值(default)

4.3 引用完整性

外键约束(foreign key)

5、SQL运算符、分配操作符(赋值操作符)

5.1 算术运算符

5.2 比较运算符

5.3 逻辑运算符

5.4 位运算符

5.5、分配操作符(赋值操作)

6、DML操作,数据操作语言

6.1、插入数据insert into tablename(col1,col2...) values(val1,val2...)

6.2、复制表结构和数据(复制表结构、复制表数据、复制表结构+数据)

6.3 、修改数据update tablename set col1=val1,col2=val2... [where...]

6.4、删除数据delete from tname [where...]

7、DQL操作,数据查询语言

8、sql函数

1、SQL语言的概念:

SQL是结构化查询语言(Structured Query Language),是关系型数据的一门通用语言,用于实现对数据库的查询,更新和管理。

2、sql的分类

  • DDL(Data Definition Language),数据定义语言,它用来定义我们的数据库对象,包括数据库、数据表和列。通过使用DDL,我们可以create、drop、alter数据库和表结构。
  • DML(Data Manipulation Language),数据操作语言,我们用它操作和数据库相关的记录,比如 insert、update、delete数据表中的记录。
  • DQL(Data Query Language),数据查询语言,我们用它查询想要的记录(select)。
  • TCL(Transaction Control Language),事务控制语言(commit 、 rollback)。
  • DCL(Data Control Language),数据控制语言,我们用它来定义访问权限和安全级别(grant 、revoke)。

3、DDL操作,数据定义语言

SQL语句--mysql增删改查语句(增删数据库、完整性约束、创建表、修改表结构、查看表、插入数据、修改数据、复制表[数据库]、删除表[数据]):https://blog.csdn.net/weixin_41685388/article/details/103107451

DDL(Data Definition Language),数据定义语言,它用来定义我们的数据库对象,包括数据库、数据表和列。通过使用 DDL,我们可以create、drop、alter数据库和表结构。

语法:

  • ①每句结束标识符是英文分号;
  • ②对大小写不敏感(不区分大小写);
  • ③给数据库,表等数据库对象起名字时不能使用关键字;
  • ④注释用: #  也可以用: -- (--后面一般会加一个空格);
  • ⑤起名时不能数字开头,一般用字母数字和下划线.

3.1、数据库操作

创建数据库:

  • create database [ if not exists ] dbname;
  • create database if not exists abc default character set utf8;
  • create database if not exists abc character set utf8;

销毁(删除)数据库:

  • drop database [if exists ] dbname;

3.2、数据类型及表操作

数据类型:

1)、数值类型

    tinyint      1Byte=8bit    非常小的整型()

    smallint    2Byte    短整型

    mediumint  3Byte   中整型

    int         4Byte          整型   能放十位十进制数(手机号就存不了了)

    bigint      8Byte     长整型

    float(n,m)    n代表长度,m代表小数点后位数   4

    double(n,m)     8

    decimal(n,m)   定点数(表示金钱)

 

整型的每一种都分无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型后加上unsigned (如:age tinyint unsigned,).

SQL基礎手冊--結構化查詢語言概念、mysql資料庫管理系統為例【sql分類、資料完整性、SQL運算符、配置設定操作符(指派操作符,案例排名)、sql函數、SQL語句(SQL增删改查)】1、SQL語言的概念:2、sql的分類3、DDL操作,資料定義語言4、資料完整性5、SQL運算符、配置設定操作符(指派操作符)6、DML操作,資料操作語言7、DQL操作,資料查詢語言8、sql函數

2)、日期类型

    date:日期

    time:时间

    datetime:日期时间

    timestamp:时间戳

    year:年

3)、 字符串类型

    char(n):定长字符串,n个字节,一个英文字母代表1个字节

    varchar(n):可变长字符串 ,n表示存放的最多字节数,推荐使用 

4)、 其他类型    

    binary:定长二进制

    varbinary:可变长二进制

    blob:二进制

    text:大对象,字符,文本

    enum:枚举

    set:集合

    bit(1):一个字节(0/1)

创建表:

#``是半角符号,可以不要
create table `tablename` (
    id int primary key auto_increment,
    name varchar(20) not null,
    hiredate date,
    age tinyint unsigned,
    sex bit(1)
)ENGINE=InnoDB character set utf8mb4;

#声明字段:字段名称 字段类型(长度) 字段约束条件等...
desc tablename;   #查看表结构信息

#加上注解
CREATE TABLE `sc` (
    `customer_id` BIGINT (20) NOT NULL COMMENT '客户ID',
    `customer_name` VARCHAR (30) DEFAULT NULL COMMENT '客户姓名',
     INDEX `idx_group_customer` (`customer_id`,`customer_name`) USING BTREE
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COMMENT = '客户表';
           

修改表结构:

alter table 表名 rename/modify/change/add/drop/drop foreign key/engine = ******;

                           //修改表 重命名/修改/更改/添加/删除/删除外键/引擎

A.添加字段
alter table tname add [column] col_name col_definition [after|first]
    添加列(默认最后一列)
    alter table tname add colname colType
    添加到指定列后
    alter table tname add colname2 colType after colname1
    添加到首列
    alter table tname add colname colType first;
B.修改字段
    alter table tname change/modify col_name new_col_name col_definition;
    修改字段名称
    alter table tname change colname1 colname2 colType
    修改数据类型
    alter table tname change colname colname colType
    alter table tname modify colname colType
    修改字段位置
    alter table tname modify colname colType after colname2;
C.删除字段
    alter table tname drop colname;
D.重命名
    rename table tname to newname;
E.重命名
    alter table tname rename to newName;
F.清空表
    truncate table tname;
G.删除整个表
    drop table tname;
           

4、数据完整性

数据完整性指代数据的准确性和可靠性

完整性约束条件(6个)

primary  key:   主键 (唯一不为空,一个表只有一个主键)
auto_increment  : 自增长(必须为主键字段)
FOREIGN KEY : 外键  
not null : 非空
unique: 唯一  (可以为空,且一个表可以有多个)
default :  默认值

4.1 实体完整性

  • 主键约束(primary key)

  • 主键字段唯一且不能为空
    创建表时声明主键
    create table user(
    userid int primary key,
    username varchar(20)
    );ENGINE= MYISAM character set utf8mb4;
    create table user(
     userid int,
     username varchar(20) character set utf8mb4,
     primary key(userid)
    );
    
    修改表结构添加约束
    alter table user add CONSTRAINT PK_USERID primary key(userid);
    alter table user add primary key(userid);
    
    1.每张表必须有且只有一个主键
    2.允许有联合主键(多个字段共同组建为一个主键)
    3.尽量选择非业务字段
    
    销毁:
    alter table user drop primary key;
               
  • 唯一约束(unique)

  • 唯一(可以为空,且一个表可以有多个)
    创建表时声明唯一约束
    create table user(
    userid int primary key,
    username varchar(20),
    card varchar(18) unique,
    );
    create table user(
    userid int primary key,
    username varchar(20),
    card varchar(18),
    unique(card) 
    );
    
    修改表结构添加唯一约束
    alter table user add CONSTRAINT UN_CAED unique(card);
    alter table user add unique(card);
    
    销毁:
    drop unique index UN_CARD on user;
               
  • 主键自增(auto_increment)

  • #自增长(必须为主键字段)为数值型,添加数据时主键自行增加
    create table user(
    userid int primary key auto_increment,
    username varchar(20),
    card varchar(18)
    )character set utf8mb4;
               

4.2 域完整性

保证列的数据正确性

  • 非空约束(not null)

  • 默认值(default)

4.3 引用完整性

保证表中字段值的有效

  • 外键约束(foreign key)

表中外键字段的取值需要依赖于另张表的主键的取值

create table example4 (
w_id int primary key auto_increment,
id int(11),
mame varchar(20) not null,
xuehao int(20) unique,
chengji int default 0,
constraint waj_4 foreign key (id) references example2 (id)
)engine=MYISAM character set utf8mb4;
#constraint 外键名 foreign key (id) references 他表 (主键字段)


alter table emp add CONSTRAINT PK_DEPTNO foreign key(deptno) REFERENCES dept(deptno);
alter table emp drop foreign key;
           

5、SQL运算符、分配操作符(赋值操作符)

5.1 算术运算符

select 2 + 2;
select 1 - 2;
select 3 * 4;
select 3 / 4;  #0.75
select 3 / 0;  #null
select 3 div 4; #整除
select 5 % 2;   #取余
           

5.2 比较运算符

#表达式为真结果为1,否则为0
select 1 > 1;
select 1 < 1;
select 1 <> 1;
select 1 != 1;
is true,is not true,
is null,is not null,
between and,not between and,
in, not in
           

5.3 逻辑运算符

表达式为真结果为1,否则为0
select 2 = 1 and 1 = 1;
select 1 = 1 or 1 = 2;
select !(2 <> 2);
           

5.4 位运算符

#先将数据转化为2进制然后计算
select 1 & 0; #按位与
select 1 | 1; #按位或 
select 1 ^ 2; #[答案:3]按位异或,转化为二进制后对比,相同为0,不相同为1
select 1 ^ 3; #[答案:2]
           
SQL基礎手冊--結構化查詢語言概念、mysql資料庫管理系統為例【sql分類、資料完整性、SQL運算符、配置設定操作符(指派操作符,案例排名)、sql函數、SQL語句(SQL增删改查)】1、SQL語言的概念:2、sql的分類3、DDL操作,資料定義語言4、資料完整性5、SQL運算符、配置設定操作符(指派操作符)6、DML操作,資料操作語言7、DQL操作,資料查詢語言8、sql函數

5.5、分配操作符(赋值操作)

select @a,@b;  #输出申明的a变量和b变量,默认值都为null
select @a := 1,@b; #select命令赋值用 := 给申明的a变量赋值,注意 := 中间不能有空格
set @b = 2; #set命令给申明的变量赋值用 = 
select @a,@b;  #此时输出的结果应该为@a = 1 ,@b = 2, 两个变量都已经被赋值
select @a := "a" ,@b := 12.35; #声明的变量可以赋予任意值(整数,小数,字符串,...)

#案例 :排序
set @rank = 0; #申明一个rank变量,并赋予初始值0

-- 注释:查询表emp,并按照sal字段降序,同时输出@rank := @rank + 1字段(表示申明的变量rank每一次都等于上一次的结果加1)
select *, @rank := @rank + 1 from emp 
order by sal desc;
           

 

6、DML操作,数据操作语言

DML(Data Manipulation Language),数据操作语言,我们用它操作和数据库相关的记录,比如 insert、update、delete数据表中的记录。更改数据,不改变结构。DML操作都在事物的环境中实现。

6.1、插入数据insert into tablename(col1,col2...) values(val1,val2...)

  • 向表中所有字段添加数据
    insert into tablename values(col1,col2,...)
    #value值的个数和顺序必须和表中字段的个数和顺序保持一致
               
  • 向表中部分字段添加数据
    insert into tablename(col1,col2...) values(val1,val2...)
    #前提是不添加值的字段允许为空。
    #value值得顺序必须和前面字段名称的顺序一致
               
  • 批量数据插入
  • insert into tablename(col1,col2,...) values(val1_1,val2_1,...),(val1_2,val2_2,...),...
               

6.2、复制表结构和数据(复制表结构、复制表数据、复制表结构+数据)

  • sql语句复制表结构和数据(复制表结构、复制表数据、复制表结构+数据)
    1、同时复制表结构和数据到新表(新表会去除约束条件),做2次表查询使用时常用
    CREATE TABLE 新表 SELECT * FROM 旧表
    示例:
    	create table tablename3 
    	select name,address,birthday,sex,phone,vocation from tablename2
    	where t2_id between 1 and 2;
    
    2、只复制表结构到新表
    CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2
    或CREATE TABLE 新表  LIKE 旧表
    示例:
    	create table tablename4 select * from tablename2 where 1=2;
    	create table tablename5 like tablename2;
    
    3、复制旧表的数据到新表(假设两个表结构一样)
    INSERT INTO 新表 SELECT * FROM 旧表
    
    4、复制旧表的数据到新表(假设两个表结构不一样)
    INSERT INTO 新表(字段1,字段2,.......) SELECT 字段1,字段2,...... FROM 旧表
    示例:
    	insert into tablename4 (name,address,birthday,sex,phone,vocation) 
    	select name,address,birthday,sex,phone,vocation from tablename2
    	where t2_id between 1 and 2;
    
    5、可以将表1结构复制到表2
    SELECT * INTO 表2 FROM 表1 WHERE 1=2
    
    6、可以将表1内容全部复制到表2
    SELECT * INTO 表2 FROM 表1
    
    7、show create table 旧表;
    这样会将旧表的创建命令列出。我们只需要将该命令拷贝出来,更改table的名字,就可以建立一个完全一样的表
    
    8、mysqldump
    用mysqldump将表dump出来,改名字后再导回去或者直接在命令行中运行
    
    9、复制旧数据库到新数据库(复制全部表结构并且复制全部表数据)
    #mysql -u root -ppassword
    >CREATE DATABASE new_db;
    #mysqldump old_db -u root -ppassword--skip-extended-insert --add-drop-table | mysql new_db -u root -ppassword
    
    10、表不在同一数据库中(如,db1 table1,  db2 table2)
    sql: insert into db1.table1 select * from db2.table2 (完全复制)
         insert into db1.table1 select distinct * from db2.table2(不复制重复纪录)
         insert into tdb1.able1 select top 4 * from   db2.table2 (前四条纪录)
               
  • 在终端复制表到数据库:
  • 在终端运行:
    mysql -h localhost -u root -p test(自己的数据库名,自行指定,数据库必须已存在) < C:\mysqldata\emp.sql(自己的sql文件存放位置) --default-character-set=utf8
    输入mysql的密码即可
               
  • SQL基礎手冊--結構化查詢語言概念、mysql資料庫管理系統為例【sql分類、資料完整性、SQL運算符、配置設定操作符(指派操作符,案例排名)、sql函數、SQL語句(SQL增删改查)】1、SQL語言的概念:2、sql的分類3、DDL操作,資料定義語言4、資料完整性5、SQL運算符、配置設定操作符(指派操作符)6、DML操作,資料操作語言7、DQL操作,資料查詢語言8、sql函數
    用Navicat 复制表:

-- 用Navicat 同数据库复制

          

SQL基礎手冊--結構化查詢語言概念、mysql資料庫管理系統為例【sql分類、資料完整性、SQL運算符、配置設定操作符(指派操作符,案例排名)、sql函數、SQL語句(SQL增删改查)】1、SQL語言的概念:2、sql的分類3、DDL操作,資料定義語言4、資料完整性5、SQL運算符、配置設定操作符(指派操作符)6、DML操作,資料操作語言7、DQL操作,資料查詢語言8、sql函數

-- 用Navicat 跨数据库复制

       

SQL基礎手冊--結構化查詢語言概念、mysql資料庫管理系統為例【sql分類、資料完整性、SQL運算符、配置設定操作符(指派操作符,案例排名)、sql函數、SQL語句(SQL增删改查)】1、SQL語言的概念:2、sql的分類3、DDL操作,資料定義語言4、資料完整性5、SQL運算符、配置設定操作符(指派操作符)6、DML操作,資料操作語言7、DQL操作,資料查詢語言8、sql函數

          

SQL基礎手冊--結構化查詢語言概念、mysql資料庫管理系統為例【sql分類、資料完整性、SQL運算符、配置設定操作符(指派操作符,案例排名)、sql函數、SQL語句(SQL增删改查)】1、SQL語言的概念:2、sql的分類3、DDL操作,資料定義語言4、資料完整性5、SQL運算符、配置設定操作符(指派操作符)6、DML操作,資料操作語言7、DQL操作,資料查詢語言8、sql函數

          

SQL基礎手冊--結構化查詢語言概念、mysql資料庫管理系統為例【sql分類、資料完整性、SQL運算符、配置設定操作符(指派操作符,案例排名)、sql函數、SQL語句(SQL增删改查)】1、SQL語言的概念:2、sql的分類3、DDL操作,資料定義語言4、資料完整性5、SQL運算符、配置設定操作符(指派操作符)6、DML操作,資料操作語言7、DQL操作,資料查詢語言8、sql函數

6.3 、修改数据update tablename set col1=val1,col2=val2... [where...]

  • update tname set col1=val1,col2=val2... [where...]
    #如果update没有使用where则代表对整张表所有记录修改,谨慎使用
               

6.4、删除数据delete from tname [where...]

  • delete from tname [where...]
    #不使用where将删除整张表中所有的记录
    
     -- delete,truncate和drop的区别?
     -- delete只删除数据,不修改表结构,不重置自增,逐行删除
     -- truncate清空表数据,不修改表结构,重置自增,删除速度比delete高
     -- drop清空表结构,表结构文件和数据文件全部删除
    案例:
    -- #删除(删除表,删除表字段,条件删除表数据,清空表)
    -- 	#删除整个表
    -- 	drop table tablename5;
    -- 	#删除表字段
    -- 	alter table tablename4 drop name;
    -- 	#条件删除表数据(当没有where限制条件时,等价于清空表,但是自增限制条件依然继续,逐行删除)
    -- 	delete from tablename4 where address = "北京市";
    -- 	#清空表(自增条件也清空被重置,全部数据一起删除,效率更高)
    -- 	truncate table tablename4;
               

7、DQL操作,数据查询语言

DQL(Data Query Language),数据查询语言,我们用它查询想要的记录(select)。

select cols #查询并展示的数据(字段,表达式等)
from tables #查询的数据来源(表,结果集,视图等)
where condition #条件语句
group by  #分组
having    #分组之后的条件判断
order by  #排序(asc升序   desc降序)
limit     #限制结果查询(仅限于mysql)
           

SQL语言--mysql基础查询语句(单表查询、条件查询、查询并排序、限制结果查询、查询并排名、分组聚合查询、······):https://blog.csdn.net/weixin_41685388/article/details/103186787

SQL语句--mysql高级查询[关联查询|多表查询](连接查询、子查询、联合查询、图解说明几种常见的连接[联合]查询):https://blog.csdn.net/weixin_41685388/article/details/103188974

8、sql函数

SQL语句--mysql常用函数(流程函数、字符串函数、数学函数、日期函数、聚合函数、分组函数、加密函数):https://blog.csdn.net/weixin_41685388/article/details/103186405

Â