SQLServer插入数据,NET学习笔记011SqlServer基础知识

sqlServer_基础概念

 

使用数据库管理工具插入数据

打开数据库,选则要插入数据的表-》右键点击-》选择插入前200行-》在右边视图中输入要插入的数据(如果字段设置为不为空,则必须输入,如果字段设置为可空,则不必须输入,插入部分、单条数据都可以)-》输入完成后,光标移动到下一行-》如果sqlserver使用默认保存,则光标离开后就会添加成功,如果sqlserver设置自动保存开关关闭,则需要手动执行F5保存数据-》刷新即可显示

澳门新葡亰平台官网 1

澳门新葡亰平台官网 2

SQL server的管理工具

Preface

使用T-SQL脚本插入数据

语法:insert into table_name values(值1, 值2,....);

插入一条完整数据:insert into [tests].[dbo].[test1] values('张三','男','22','1');

澳门新葡亰平台官网 3

语法:insert into table_name(列名1,列名2) values(值1, 值2);

插入指定字段数据:insert into [tests].[dbo].test1(name,sex,classid) values('李四','男','2');

澳门新葡亰平台官网 4

语法:insert into table_name(列名1,列名2) values(值1, 值2),(值3 ,值4),(值5 ,值6);

插入多条数据:

insert into [tests].[dbo].test1(name,sex,age,classid)

values('王五','男','22','2'),('马六','男','22','2'),('孙七','男','22','2');

澳门新葡亰平台官网 5

语法:insert into table_name1(列名1,列名2) select 列名1,列名2 from table_name2  where 条件;

蠕虫复制两个表结构一模一样,插入时插入主键步骤:

1、打开自增列属性,设置为ON,允许表在插入数据的时候插入指定的自增列。

set identity_insert [tests].[dbo].test3 on;

2、执行插入语句(插入列必须和查询出来的列相对应)。

insert into [tests].[dbo].test3(id,name,sex,age,classid)
select * from [tests].[dbo].test1;

3、插入完成,关闭自增列属性,设置为off

 set identity_insert [tests].[dbo].test3 off ;

澳门新葡亰平台官网 6

 

 蠕虫复制两个表结构不一样,选择性插入表中(注意:查询出来的列和要插入的列必须一一对应):

insert into tests.dbo.test2(name)
select name from tests.dbo.test1;

澳门新葡亰平台官网 7

示例结果:

澳门新葡亰平台官网 8

 

SQL server联机丛书

开始菜单à Microsoft SQL Server 2008 à 文档和教程 à SQL Server联机丛书

SQL Server 配置管理器

用于启动和管理SQL server数据库的服务端,以及其他相关功能。

当我们启动SQL Server 配置管理器之后,可以在左侧目录中看到“SQL Server服务”,在“SQL Server服务”里,我们就可以对SQL Server的服务端,也就是核心数据引擎进行管理。

其中“SQL Server (MSSQLSERVER)” 和 “SQL Server (SQLEXPRESS)”就是代表我们所安装的具体的服务端,前者是正式版,后者是体验版。

打开Server配置管理器的另一种方法:

“我的电脑”à右键菜单à管理à”服务和应用”àSQL Server配置管理器

 

SQL server profiler

当我们的数据服务端出现问题和故障的时候,它可以给我们提供实时的跟踪工具,和性能监控的作用。

    In my previous blogs,I've demonstrated several mothods of how to rescue a dropped table(or truncated table as well).

SQL Server Management Studio

它就是SQL server的图形化的管理界面,也就是客户端。

  •     full mysqldump backup + binlog on master(master was normally running)
  •     full Xtrabackup backup + binlog on master(master was normally running)**
  •     full Xtrabackup backup + binlog on binlog server( binlog server had acquired binlogs before master crashed.)

启动Management Studio

澳门新葡亰平台官网,在登陆界面输入相关的信息:

服务器类型:数据库引擎

服务器名称:我们可以输入IP地址, 计算机名称。如果是访问本机的SQL server服务并且没有改变默认端口号的话,只需要输入一个点 ” . ”,它就代表本机的SQL Server正式版的服务端。(体验版是.SQLEXPRESS)

身份验证:SQL Server身份验证

用户名:sa

密码:sa

 

当SQL Server身份验证无法登陆时

1、 用windows身份验证(也就是用本机管理员来登陆,不需要输入用户名密码的)。

2、 展开左侧目录中的 SQL Server à 安全性 à 登陆名 à 双击sa à 打开sa 用户的属性窗口。

3、 修改密码

4、 取消”强制实施密码策略”

5、 在“状态”选项卡中,对“是否允许连接到数据引擎”和“登陆”分别选择“授予”和“启动”。

6、 点击确定关闭sa 用户的属性窗口

7、 右键点击服务器根节点,选择属性打开“服务器属性”弹窗。

8、 选择“安全性”选项卡,设置“服务器身份验证”为“SQL Server和Windows身份验证”。

9、 确定并关闭“服务器属性”弹窗,然后在SQL server配置管理器中重启数据服务端,再用sql server 帐户密码来登陆即可。

    Les't see another way to achieve the goal more simply.

SQL Management Studio的界面操作

左侧目录中,我们可以创建数据库数据表。

左上角的新建查询按钮,可以打开一个输入与执行SQL语句的窗口。在此窗口中我们可以通过按F5键或点击“执行”来运行SQL语句。 在输入多条SQL语句的情况下,可以选中需要执行的代码,然后按F5来只执行被选中的部分。

 

sqlcmd命令行管理工具

通过纯指令的方式来管理SQL server数据库服务端。

开始菜单à 运行à输入cmd打开命令行窗口à输入sqlcmd /? 查看sqlcmd命令的帮助信息。

在该命令行下我们可以通过sql语句来操作数据库。

比如:

sqlcmd

use test

select * from student

go

最后,必须输入go才会开始执行SQL语句。exit退出sqlcmd命令行状态。

Procedure

修改数据表结构

很多时候我们需要修改数据表字段结构,比如添加字段、修改字段类型和字段名,但是SQL server默认情况下会阻止我们对数据表结构的修改。所以我们需要更改SQL Server的设置参数。

工具菜单à 选项à 打开”选项”弹窗中的”Designers”选项卡à取消”阻止保存要求重新创建表的更改”前面的选中状态。

 

T-SQL基本语法

***Step

select语句

语法:

SELECT 字段列表 FROM 表名
  1. Destroy***

where子句

where运算符

=,>,<,>=,<=,<>,!=,!>,!<

<>表示不等于,!>不大于。

AND 、OR、NOT

 

BETWEEN

select * from student 

where age BETWEEN 13 AND 19

 

查询指定的数据值是否在第一个值和第二个值的范围内。

LIKE

select * from student 

where name LIKE '%小%'

 

 

模糊查询,可以使用通配符,

%用来表示任意个任意字符,

_ 下划线用来表示一个字符。

 

select * from student 

where name LIKE '_白'

 

 

 

IN

是指从一个集合中去逐一匹配,只要数据值在集合中能找到相同的项,where条件就成立了。

 

select * from student 

where name IN ('小张','小黑','小平','小李')

 

----------------------------------

select * from student 

where name IN (select name from student where age <20)

 

 

 

 

 

EXISTS

用来判断一个子查询是否有结果,当子查询返回了至少一个结果时,where条件成立。

 

select * from student 

where exists(select * from student where age =99)

 

 

 

 

group by子句

将指定字段中的相同的值进行分组。值相同的只显示一行。

示例1:

SELECT age,COUNT(name) from student group by age

示例2:

在sql server 中所显示的字段列表中,不能使用group by后面没有出现过的字段名,除非使用聚合函数。

SELECT age,address,COUNT(name) from student group by age,address

Check the table on master.

order by子句

比如倒序排序

SELECT * from studentorder by id DESC
 1 (zlm@192.168.1.101 3306)[sysbench]>show tables;
 2 ERROR 2006 (HY000): MySQL server has gone away
 3 No connection. Trying to reconnect...
 4 Connection id:    4
 5 Current database: sysbench
 6 
 7 +--------------------+
 8 | Tables_in_sysbench |
 9 +--------------------+
10 | sbtest1            |
11 | sbtest2            |
12 | sbtest3            |
13 | sbtest4            |
14 | sbtest5            |
15 +--------------------+
16 5 rows in set (0.00 sec)
17 
18 (zlm@192.168.1.101 3306)[sysbench]>select count(*) from sbtest5;
19 +----------+
20 | count(*) |
21 +----------+
22 |    10000 |
23 +----------+
24 1 row in set (0.01 sec)

top子句

 

Having子句

用来给分组设置条件

示例:

SELECT age,name from student group by age,name having name = '小李'

**Generate a full Xtrabackup of master.**

DISTINCT子句

清除并返回结果中重复的值。

SELECT DISTINCT age from student
 1 [root@zlm2 06:28:44 /data/mysql/mysql3306/data]
 2 #innobackupex --default-file=/data/mysql/mysql3306/my.cnf --host=localhost -uroot -pPassw0rd /data/backup
 3 xtrabackup: recognized server arguments: 
 4 xtrabackup: recognized client arguments: 
 5 180731 06:29:03 innobackupex: Starting the backup operation
 6 ... //Omitted.
 7 
 8 180731 06:29:31 Executing UNLOCK TABLES
 9 180731 06:29:31 All tables unlocked
10 180731 06:29:31 [00] Copying ib_buffer_pool to /data/backup/2018-07-31_06-29-03/ib_buffer_pool
11 180731 06:29:31 [00]        ...done
12 180731 06:29:31 Backup created in directory '/data/backup/2018-07-31_06-29-03/'
13 MySQL binlog position: filename 'mysql-bin.000043', position '190', GTID of the last change '1b7181ee-6eaf-11e8-998e-080027de0e0e:1-3730229'
14 180731 06:29:31 [00] Writing /data/backup/2018-07-31_06-29-03/backup-my.cnf
15 180731 06:29:31 [00]        ...done
16 180731 06:29:31 [00] Writing /data/backup/2018-07-31_06-29-03/xtrabackup_info
17 180731 06:29:31 [00]        ...done
18 xtrabackup: Transaction log of lsn (10141400402) to (10141400411) was copied.
19 180731 06:29:31 completed OK!

insert into插入数据

 

一次插入一行数据

insert into student (name,age,sex,address,phone) values('小宝',13,1,'城革大本营',12345678)

**Continue to executing some dml operations on the target table and then kill the mysqld.**

一次插入多行数据

insert into student (name,age,sex,address,phone) values
('大宝',28,1,'城革大本营',12345678),
('小宝',13,1,'城革大本营',12345678),
('老宝',82,1,'城革大本营',12345678);
 1 (zlm@192.168.1.101 3306)[sysbench]>delete from sbtest5 limit 2000;
 2 Query OK, 2000 rows affected (0.10 sec)
 3 
 4 (zlm@192.168.1.101 3306)[sysbench]>delete from sbtest5 limit 3000;
 5 Query OK, 3000 rows affected (0.07 sec)
 6 
 7 (zlm@192.168.1.101 3306)[sysbench]>select count(*) from sbtest5;
 8 +----------+
 9 | count(*) |
10 +----------+
11 |     5000 |
12 +----------+
13 1 row in set (0.00 sec)
14 
15 (zlm@192.168.1.101 3306)[sysbench]>drop table sbtest5;
16 Query OK, 0 rows affected (0.01 sec)
17 
18 (zlm@192.168.1.101 3306)[sysbench]>flush logs;
19 Query OK, 0 rows affected (0.02 sec)
20 
21 (zlm@192.168.1.101 3306)[sysbench]>show master status;
22 +------------------+----------+--------------+------------------+------------------------------------------------+
23 | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                              |
24 +------------------+----------+--------------+------------------+------------------------------------------------+
25 | mysql-bin.000044 |      190 |              |                  | 1b7181ee-6eaf-11e8-998e-080027de0e0e:1-3730232 |
26 +------------------+----------+--------------+------------------+------------------------------------------------+
27 1 row in set (0.00 sec)
28 
29 [root@zlm2 06:38:14 ~]
30 #pkill mysqld
31 
32 [root@zlm2 06:38:18 ~]
33 #ps aux|grep mysqld
34 root      4050  0.0  0.0 112640   956 pts/0    R+   06:38   0:00 grep --color=auto mysqld

省略字段名按表的字段顺序来插入数据

insert into student values('小白楼',60,1,'沙坪坝',12345678)

注意:这种方式必须按照表的字段顺序(除了主键ID)来排列语句中的字段值,并且所有字段都必须填写值

 

聚合函数

AVG() 求平均值

SUM() 求合

MIN()/MAX() 求最大最小值

COUNT() 统计行数

**Scp the Xtrabackup backup to another server zlm3 with newly initialized instance**

UPDATE语句

update dbo.student set name='小白龙' where id = 14
1 [root@zlm2 06:43:42 ~]
2 #scp -r /data/backup/2018-07-31_06-29-03/ zlm3:/data/backup
3 root@zlm3's password: 
4 xtrabackup_logfile                                                                                                 100% 2560     2.5KB/s   00:00    
5 ibdata1                                                                                                            100%  100MB  50.0MB/s   00:02    
6 plugin.ibd                                                                                                         100%   96KB  96.0KB/s   00:00    
7 servers.ibd                                                                                                        100%   96KB  96.0KB/s   00:00
8 ... //Omitted.

DELETE语句

delete dbo.student where id=14

 

练习

创建一张学生数据表,包含字段id、name、age、sex、address、phone、classNum

1、 一次性插入5条学生数据,并且不写字段名。

2、 用select语句查询ID为2到ID为4之间的记录,(用BETWEEN关键字)。

3、 查询出所有姓王的同学(用LIKE模糊查询)。

4、 查询出班上年龄为(16、17、23、24)的同学

5、 统计各班分别有多少名学生

6、 分别统计男生与女生的年龄总合。

7、 找到年龄最大的女生。

8、 修改id为3的学生姓名为”李小虫”

9、 删除id为3的学生。

连接查询

同时查询多张数据表并将这些数据表以一定的逻辑关系进行连接,让它们显示的结果类似于一张数据表。

与连接有关的关键字:

INNER JOIN 、OUTER JOIN ( LEFT和RIGHT)、FULL JOIN、CROSS JOIN

 

**Step 2. Rescue***

内部连接

它根据一个或几个相同的字段将记录匹配在一起,将这两张表中的数据一起查询出来。

内部连接的特点是,只显示有关联的数据,但是没有关系的数据是不会被显示出来的。


语法:

SELECT <字段列表> FROM <第一张表> <连接类型> <第二张表> <ON 连接条件>

 

二表连接,示例:

select * from student INNER JOIN class ON student.cid = class.id

Restore the backup on zlm3.

多表连接,示例:

select student.name,classInfo.className,teacher.name from student
INNER JOIN 
classInfo  ON student.cid = classInfo.cid
INNER JOIN 
teacher ON classInfo.teacher= teacher.tid
 1 [root@zlm3 06:47:52 ~]
 2 #innobackupex --defaults-file=/data/mysql/mysql3306/my.cnf --apply-log /data/backup/2018-07-31_06-29-03/
 3 ... //Omitted.
 4 
 5 [root@zlm3 06:46:39 ~]
 6 #cd /data/mysql/mysql3306/data/
 7 
 8 [root@zlm3 06:46:44 /data/mysql/mysql3306/data]
 9 #ls -l
10 total 409716
11 -rw-r----- 1 mysql mysql        56 Jul 27 11:15 auto.cnf
12 -rw-r----- 1 mysql mysql     19677 Jul 27 11:25 error.log
13 -rw-r----- 1 mysql mysql      2005 Jul 27 11:25 ib_buffer_pool
14 -rw-r----- 1 mysql mysql 104857600 Jul 27 11:25 ibdata1
15 -rw-r----- 1 mysql mysql 104857600 Jul 27 11:25 ib_logfile0
16 -rw-r----- 1 mysql mysql 104857600 Jul 27 11:14 ib_logfile1
17 -rw-r----- 1 mysql mysql 104857600 Jul 27 11:14 ib_logfile2
18 drwxr-x--- 2 mysql mysql      4096 Jul 27 11:15 mysql
19 drwxr-x--- 2 mysql mysql      8192 Jul 27 11:15 performance_schema
20 -rw-r----- 1 mysql mysql       276 Jul 27 11:18 relay-bin.000003
21 -rw-r----- 1 mysql mysql      2771 Jul 27 11:25 relay-bin.000004
22 -rw-r----- 1 mysql mysql       292 Jul 27 11:25 relay-bin.000005
23 -rw-r----- 1 mysql mysql       454 Jul 27 11:25 relay-bin.000006
24 -rw-r----- 1 mysql mysql       344 Jul 27 11:25 relay-bin.000007
25 -rw-r----- 1 mysql mysql       169 Jul 27 11:25 relay-bin-group_replication_applier.000001
26 -rw-r----- 1 mysql mysql        45 Jul 27 11:15 relay-bin-group_replication_applier.index
27 -rw-r----- 1 mysql mysql       169 Jul 27 11:25 relay-bin-group_replication_recovery.000001
28 -rw-r----- 1 mysql mysql        46 Jul 27 11:15 relay-bin-group_replication_recovery.index
29 -rw-r----- 1 mysql mysql        95 Jul 27 11:25 relay-bin.index
30 -rw-r----- 1 mysql mysql       334 Jul 27 11:25 slow.log
31 drwxr-x--- 2 mysql mysql      8192 Jul 27 11:15 sys
32 drwxr-x--- 2 mysql mysql      4096 Jul 27 11:15 sysbench
33 -rw-r----- 1 mysql mysql        24 Jul 27 11:15 xtrabackup_binlog_pos_innodb
34 -rw-r----- 1 mysql mysql       587 Jul 27 11:15 xtrabackup_info
35 -rw-r----- 1 mysql mysql         1 Jul 27 11:15 xtrabackup_master_key_id
36 
37 [root@zlm3 06:46:45 /data/mysql/mysql3306/data]
38 #rm -rf *
39 
40 [root@zlm3 06:46:50 /data/mysql/mysql3306/data]
41 #ps aux|grep mysqld
42 root      3913  0.0  0.0 112640   960 pts/1    R+   06:50   0:00 grep --color=auto mysqld
43 
44 [root@zlm3 06:51:00 ~]
45 #innobackupex --defaults-file=/data/mysql/mysql3306/my.cnf --copy-back /data/backup/2018-07-31_06-29-03/
46 ... //Omitted.
47 
48 180731 06:51:36 [01] Copying ./ib_buffer_pool to /data/mysql/mysql3306/data/ib_buffer_pool
49 180731 06:51:36 [01]        ...done
50 180731 06:51:36 [01] Copying ./xtrabackup_info to /data/mysql/mysql3306/data/xtrabackup_info
51 180731 06:51:36 [01]        ...done
52 180731 06:51:36 [01] Copying ./xtrabackup_binlog_pos_innodb to /data/mysql/mysql3306/data/xtrabackup_binlog_pos_innodb
53 180731 06:51:36 [01]        ...done
54 180731 06:51:36 [01] Copying ./xtrabackup_master_key_id to /data/mysql/mysql3306/data/xtrabackup_master_key_id
55 180731 06:51:36 [01]        ...done
56 180731 06:51:36 [01] Copying ./ibtmp1 to /data/mysql/mysql3306/data/ibtmp1
57 180731 06:51:36 [01]        ...done
58 180731 06:51:36 completed OK!
59 
60 [root@zlm3 06:50:14 /data/mysql/mysql3306/data]
61 #ls -l
62 total 421936
63 -rw-r----- 1 root root      1017 Jul 31 06:51 ib_buffer_pool
64 -rw-r----- 1 root root 104857600 Jul 31 06:51 ibdata1
65 -rw-r----- 1 root root 104857600 Jul 31 06:51 ib_logfile0
66 -rw-r----- 1 root root 104857600 Jul 31 06:51 ib_logfile1
67 -rw-r----- 1 root root 104857600 Jul 31 06:51 ib_logfile2
68 -rw-r----- 1 root root  12582912 Jul 31 06:51 ibtmp1
69 drwxr-x--- 2 root root      4096 Jul 31 06:51 mysql
70 drwxr-x--- 2 root root      8192 Jul 31 06:51 performance_schema
71 drwxr-x--- 2 root root      8192 Jul 31 06:51 sys
72 drwxr-x--- 2 root root      4096 Jul 31 06:51 sysbench
73 -rw-r----- 1 root root        22 Jul 31 06:51 xtrabackup_binlog_pos_innodb
74 -rw-r----- 1 root root       600 Jul 31 06:51 xtrabackup_info
75 -rw-r----- 1 root root         1 Jul 31 06:51 xtrabackup_master_key_id
76 drwxr-x--- 2 root root       120 Jul 31 06:51 zlm
77 
78 [root@zlm3 06:53:49 /data/mysql/mysql3306/data]
79 #chown -R mysql.mysql *

多表连接的使用别名,省略as

select s.name,c.className,t.name from student as s
INNER JOIN 
classInfo as c  ON s.cid = c.cid
INNER JOIN 
teacher as t ON c.teacher= t.tid

我们可以通过as关键字来给数据表定义一个别名,而且通过这个别名调用表中的字段。

注意:只要定义了别名,就必须使用别名,原表的名字就不能再用了。

而且as关键字是可以省略的:

select s.name,c.className,t.name from student  s
INNER JOIN classInfo  c  ON s.cid = c.cid
INNER JOIN teacher  t ON c.teacher= t.tid

补充:内部连接的INNER JOIN可以简化为JOIN ,效果是一样的。

 

外部连接

内部连接有一定的排他性,第二张表是对第一张表的补充,如果第一张表不需要第二张表中的某些数据,那么第二张表中不被需要的数据就不会被显示出来。

**Startup the MySQL instance on zlm3.**

语法:

SELECT <字段列表> FROM <左表><LEFT | RIGHT > [OUTER] JOIN <右表> ON <连接条件>

如果使用LEFT就是显示左表中的所有数据,如果使用Right就是显示右表中的所有数据

 1 [root@zlm3 06:53:57 /data/mysql/mysql3306/data]
 2 #sh /root/mysqld.sh
 3 
 4 [root@zlm3 06:55:16 /data/mysql/mysql3306/data]
 5 #ps aux|grep mysqld
 6 mysql     3940 20.0 17.7 1110004 180300 pts/1  Sl   06:55   0:00 mysqld --defaults-file=/data/mysql/mysql3306/my.cnf
 7 root      3975  0.0  0.0 112640   956 pts/1    R+   06:55   0:00 grep --color=auto mysqld
 8 
 9 [root@zlm3 06:55:44 /data/mysql/mysql3306/data]
10 #mysql
11 Welcome to the MySQL monitor.  Commands end with ; or g.
12 Your MySQL connection id is 3
13 Server version: 5.7.21-log MySQL Community Server (GPL)
14 
15 Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
16 
17 Oracle is a registered trademark of Oracle Corporation and/or its
18 affiliates. Other names may be trademarks of their respective
19 owners.
20 
21 Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
22 
23 (zlm@192.168.1.102 3306)[(none)]>select count(*) from sysbench.sbtest5;
24 +----------+
25 | count(*) |
26 +----------+
27 |    10000 |
28 +----------+
29 1 row in set (0.02 sec)

示例:

select *from student as s RIGHT JOIN Class Info as c  ON s.cid = c.cid

 

多部外部连接示例:

select * from student  s RIGHT JOIN classInfo  c  ON s.cid = c.cid
LEFT JOINteacher t ON c.teacher=t.tid

**    The data in Xtrabackup of master has been restored on zlm3. *Notice,it doesn't contain the operations of deletion 5000 rows. Firstly,I supposed that the mysqld has crashed and it can never start again. Secondly,I don't have binlog server any more this time.Is *there any other way to restore the dropping table and guarantee the change will not lose on it?**How can we restore the data safely and simply?Surely there is.**

完全连接

完全连接( FULL JOIN 或 FULL OUTER JOIN )

用于显示所连接的所有表的所有数据,即使这条数据没有任何关联关系。

select *from student  s FULL JOIN classInfo  c  ON s.cid = c.cid

    Even thought the mysqld process is down on master.I still can get the binlog files on it.How about change the master binlog files into relay log files and apply them on zlm3?Let's have a try.

练习:

1、 先重做上课时讲的例子。

2a、 假设现在制作一个超市购物系统,产品信息表(product)(id、name、price)、用户表(customer)(id、name)、购物清单表(saleList)(id、产品编号pid、用户编号cid)

2b、 用一条select语句查询某个用户的购清单上的所有产品。

2c、 用一条select语句查询得到某个用户的购清单上的所有产品的总价。

 

3a、假设现在制作一个电影院的数据查询系统,坐位表(site)(id、row、col)、客户表(customer)(id、name、phoneNum)、电影票(ticket)(id、cid、sid、mid)、电影表(movie)(id、name、mtime)

3b、查询某一场电影的所有坐位上的客户的信息。

3c、查询某一场电影的所有坐位上的客户的信息,并且显示空坐位。

(如何判断一个字段的值为NULL值:

select * from movie where name is null)
select s.id,c.name from dbo.ticket t
join dbo.customer c on t.cid=c.id
join dbo.movie m on t.mid=m.id
right join dbo.site s on t.sid = s.id
where m.id=1
union
select id,'无座' as name  from site where id not in
(select site.id from ticket
join dbo.customer on ticket.cid=customer.id
join dbo.movie on ticket.mid=movie.id
right join dbo.site on ticket.sid = site.id
where movie.id=1)

3d、查询某一个客户看过的所有电影的名称。

 

子查询

它是指一个select查询语句,并不是直接从数据表中来得到数据,而是从另外一个查询语句的结果集中来进行查询。

示例:

select s.name,s.age,s.sex from (

select * from student where sex = 0

) as s

where age >20

其中,在from关键字的后面,并不是数据表而是select语句。

**Step

交叉连接

交叉连接在本质上,也可以看做是一种内连接。只显示有一关联的数据。

  1. Special technique*

示例

--内连接写法

select * from classInfo

inner join teacher

on classInfo.teacher=teacher.tid

 

--交叉连接写法

select * from classInfo,teacher

where classInfo.teacher=teacher.tid

 

 

两者的结果是一样的

 


联合UNION

使用两个或两个以上查询合并后只返回一个结果集

比如:

得到班上年龄大于20和所有男生的合集

select * from student where age>20

union

select * from student where sex = 1

 

 

前提每条select语句返回的字段列表的个数和顺序必须是一致的。

 

 

联合后返回重复的数据

union联合后的结果自动去除掉多个select结果中的重复数据,如果需要重复显示这些重复数据,我们可以使用union all关键字:

select * from student where age>20

union all

select * from student where sex = 1

 

创建与修改数据库、表

 

Make sure which binlogs we need and copy them to zlm3.

SQL Server中的对象名

多数情况下我们使用的是数据表或数据库的简写形式,实际上SQL server中的数据表有4层命名约定。

[数据服务器名.[数据库名.[模式名.]]] 对象名

.test.dbo.student

数据库服务器名:默认是指当前已登陆的这个数据服务器。

数据库名:默认是指在客户端左上角的下拉列表中已选择的数据库名,或用use 指令指定数据库。

use test select * from student where sex = 1
 1 [root@zlm3 07:23:49 /data/backup/2018-07-31_06-29-03]
 2 #cat xtrabackup_binlog_info
 3 mysql-bin.000043    190    1b7181ee-6eaf-11e8-998e-080027de0e0e:1-3730229 //It means that the binlog we need should begin from mysql-bin.000043.
 4 
 5 [root@zlm2 06:38:09 /data/mysql/mysql3306/data]
 6 #cd ../logs
 7 
 8 [root@zlm2 07:20:00 /data/mysql/mysql3306/logs]
 9 #ls -l
10 total 64848
11 -rw-r----- 1 mysql mysql      233 Jul 23 11:21 mysql-bin.000023
12 -rw-r----- 1 mysql mysql      209 Jul 23 11:21 mysql-bin.000024
13 -rw-r----- 1 mysql mysql      233 Jul 24 11:27 mysql-bin.000025
14 -rw-r----- 1 mysql mysql      209 Jul 24 11:27 mysql-bin.000026
15 -rw-r----- 1 mysql mysql      233 Jul 25 06:12 mysql-bin.000027
16 -rw-r----- 1 mysql mysql      209 Jul 25 06:12 mysql-bin.000028
17 -rw-r----- 1 mysql mysql  5727732 Jul 25 11:33 mysql-bin.000029
18 -rw-r----- 1 mysql mysql      209 Jul 25 11:33 mysql-bin.000030
19 -rw-r----- 1 mysql mysql 58202858 Jul 26 09:12 mysql-bin.000031
20 -rw-r----- 1 mysql mysql   477279 Jul 26 09:13 mysql-bin.000032
21 -rw-r----- 1 mysql mysql      383 Jul 26 11:21 mysql-bin.000033
22 -rw-r----- 1 mysql mysql      209 Jul 26 11:21 mysql-bin.000034
23 -rw-r----- 1 mysql mysql   954930 Jul 27 07:59 mysql-bin.000035
24 -rw-r----- 1 mysql mysql     2566 Jul 27 11:25 mysql-bin.000036
25 -rw-r----- 1 mysql mysql      209 Jul 27 11:25 mysql-bin.000037
26 -rw-r----- 1 mysql mysql     1394 Jul 30 11:29 mysql-bin.000038
27 -rw-r----- 1 mysql mysql      209 Jul 30 11:29 mysql-bin.000039
28 -rw-r----- 1 mysql mysql      418 Jul 31 04:37 mysql-bin.000040
29 -rw-r----- 1 mysql mysql      233 Jul 31 04:37 mysql-bin.000041
30 -rw-r----- 1 mysql mysql      233 Jul 31 04:37 mysql-bin.000042
31 -rw-r----- 1 mysql mysql   954479 Jul 31 06:35 mysql-bin.000043
32 -rw-r----- 1 mysql mysql      209 Jul 31 06:38 mysql-bin.000044
33 -rw-r----- 1 mysql mysql      968 Jul 31 06:35 mysql-bin.index
34 
35 [root@zlm2 07:28:32 /data/mysql/mysql3306/logs]
36 #scp mysql-bin.00004{3,4} zlm3:/data/backup37 root@zlm3's password: 
38 mysql-bin.000043                                                                                                   100%  932KB 932.1KB/s   00:00    
39 mysql-bin.000044                                                                                                   100%  209     0.2KB/s   00:00

模式名

SQL server对象可以拥有两种模式名。

第一种模式:该对象拥有的权限的用户。

第二种模式:默认dbo,允许多个登陆用户共享的一种访问模式。

模式所代表的就是访问权限,通常我们使用默认的dbo模式。

 

CREATE语句

它用来创建数据库对象

**Transfer the mysql-bin files into relay-bin files.**

语法:

CREATE <对象类型> <对象名称>

CREATE DATABASE news

CREATE TABLE newContext( id int )
 1 [root@zlm3 07:24:08 /data/backup/2018-07-31_06-29-03]
 2 #cd ..
 3 
 4 [root@zlm3 07:30:46 /data/backup]
 5 #ls -l
 6 total 944
 7 drwxr-x--- 7 root root   4096 Jul 31 06:48 2018-07-31_06-29-03
 8 -rw-r----- 1 root root 954479 Jul 31 07:28 mysql-bin.000043
 9 -rw-r----- 1 root root    209 Jul 31 07:28 mysql-bin.000044
10 
11 [root@zlm3 07:30:47 /data/backup]
12 #for i in $(ls mysql-bin.0*)
13 > do
14 >     ext=$(echo $i | cut -d'.' -f2);
15 >     cp $i relay-bin.$ext;
16 > done
17 
18 [root@zlm3 07:31:19 /data/backup]
19 #ls -l
20 total 1884
21 drwxr-x--- 7 root root   4096 Jul 31 06:48 2018-07-31_06-29-03
22 -rw-r----- 1 root root 954479 Jul 31 07:28 mysql-bin.000043
23 -rw-r----- 1 root root    209 Jul 31 07:28 mysql-bin.000044
24 -rw-r----- 1 root root 954479 Jul 31 07:31 relay-bin.000043
25 -rw-r----- 1 root root    209 Jul 31 07:31 relay-bin.000044 
26 
27 [root@zlm3 07:36:18 /data/backup]
28 #ls ./relay-bin.0* > relay-bin.index
29 
30 [root@zlm3 07:36:20 /data/backup]
31 #ls -l
32 total 1888
33 drwxr-x--- 7 root root   4096 Jul 31 06:48 2018-07-31_06-29-03
34 -rw-r----- 1 root root 954479 Jul 31 07:28 mysql-bin.000043
35 -rw-r----- 1 root root    209 Jul 31 07:28 mysql-bin.000044
36 -rw-r----- 1 root root 954479 Jul 31 07:31 relay-bin.000043
37 -rw-r----- 1 root root    209 Jul 31 07:31 relay-bin.000044
38 -rw-r--r-- 1 root root     38 Jul 31 07:36 relay-bin.index
39 
40 [root@zlm3 07:36:23 /data/backup]
41 #cat relay-bin.index 
42 ./relay-bin.000043
43 ./relay-bin.000044
44 
45 [root@zlm3 07:36:27 /data/backup]
46 #chown mysql.mysql relay*
47 
48 [root@zlm3 07:37:12 /data/backup]
49 #ls -l
50 total 1888
51 drwxr-x--- 7 root  root    4096 Jul 31 06:48 2018-07-31_06-29-03
52 -rw-r----- 1 root  root  954479 Jul 31 07:28 mysql-bin.000043
53 -rw-r----- 1 root  root     209 Jul 31 07:28 mysql-bin.000044
54 -rw-r----- 1 mysql mysql 954479 Jul 31 07:31 relay-bin.000043
55 -rw-r----- 1 mysql mysql    209 Jul 31 07:31 relay-bin.000044
56 -rw-r--r-- 1 mysql mysql     38 Jul 31 07:36 relay-bin.index

CREATE DATABASE创建数据库

新创建的数据库,除了创建者、系统管理员、数据库所有者以外,其他人都无法访问。

 

CREATE DATABASE 的完整语法

CREATE DATABASE
[
[ON | PRIMARY ]
(
[NAME = ‘实例名’ ,]
[FILENAME = ‘文件名’ ,]
[SIZE = 文件大小 ,]
[MAXSIZE = 文件最大容量]
)
]
[
[ON | PRIMARY ]
(
[NAME = ‘实例名’ ,]
[FILENAME = ‘文件名’ ,]
[SIZE = 文件大小 ,]
[MAXSIZE = 文件最大容量]
)
]
 [COLLATE <核对名称>]
[FOR ATTACH [ WITH <server broker> ||FROM ATTACH_REBUILD_LOG ||WITH DB_CHAINING ON|OFF|TRUSTWORTHY ON|OFF  ]]
[AS SNAPSHOT OF<源数据库名>]
ON

 

用在两个地方:一是定义数据库文件的位置。二是定义数据日志库文件的位置。

PRIMARY 关键字用于指定多个数据库文件中的主文件。

NAME 指定文件的实例名称。也就是在数据库的逻辑名(非物理文件名)

FILENAME 就是指数据文件的物理位置和文件名,mdf(数据库)  ldf(日志文件)

SIZE 数据库大小,可以在数字后面用KB或GB表示数据库的大小。

MAXSIZE 最大小容量。

 

**Copy these relay-bin files to the proper directory.**

COLLATE

用于处理排序和字母大小写等问题

 

 1 [root@zlm3 07:48:10 /data/backup]
 2 #cp relay* /data/mysql/mysql3306/data
 3 
 4 [root@zlm3 07:48:27 /data/backup]
 5 #cd /data/mysql/mysql3306/data
 6 
 7 [root@zlm3 07:48:35 /data/mysql/mysql3306/data]
 8 #ls -l|grep relay
 9 -rw-r----- 1 root  root     954479 Jul 31 07:48 relay-bin.000043 //Notice,the owner and group has been changed.
10 -rw-r----- 1 root  root        209 Jul 31 07:48 relay-bin.000044
11 -rw-r----- 1 mysql mysql       150 Jul 31 06:55 relay-bin-group_replication_applier.000001
12 -rw-r----- 1 mysql mysql        45 Jul 31 06:55 relay-bin-group_replication_applier.index
13 -rw-r----- 1 mysql mysql       150 Jul 31 06:55 relay-bin-group_replication_recovery.000001
14 -rw-r----- 1 mysql mysql        46 Jul 31 06:55 relay-bin-group_replication_recovery.index
15 -rw-r--r-- 1 root  root         60 Jul 31 07:48 relay-bin.index
16 
17 [root@zlm3 07:48:40 /data/mysql/mysql3306/data]
18 #chown mysql.mysql relay*
19 
20 [root@zlm3 07:49:45 /data/mysql/mysql3306/data]
21 #ls -l|grep relay
22 -rw-r----- 1 mysql mysql    954479 Jul 31 07:48 relay-bin.000043
23 -rw-r----- 1 mysql mysql       209 Jul 31 07:48 relay-bin.000044
24 -rw-r----- 1 mysql mysql       150 Jul 31 06:55 relay-bin-group_replication_applier.000001
25 -rw-r----- 1 mysql mysql        45 Jul 31 06:55 relay-bin-group_replication_applier.index
26 -rw-r----- 1 mysql mysql       150 Jul 31 06:55 relay-bin-group_replication_recovery.000001
27 -rw-r----- 1 mysql mysql        46 Jul 31 06:55 relay-bin-group_replication_recovery.index
28 -rw-r--r-- 1 mysql mysql        60 Jul 31 07:48 relay-bin.index

FOR ATTACH

将已存在的一些数据库文件附加到当前服务器上。当前,这个文件必须是数据库的一部分。

 

 

WITH DB_CHAINING

跨越数据库所有权

 

**Restart the mysqld process.**

TRUSTWORTHY

为sql server数据库文件添加安全层

 1 [root@zlm3 08:25:18 /data/mysql/mysql3306/data]
 2 #mysqladmin shutdown
 3 
 4 [root@zlm3 08:31:25 /data/mysql/mysql3306/data]
 5 #ps aux|grep mysqld
 6 root      4309  0.0  0.0 112640   956 pts/1    R+   08:31   0:00 grep --color=auto mysqld
 7 
 8 [root@zlm3 08:31:35 /data/mysql/mysql3306/data]
 9 #sh /root/mysqld.sh
10 
11 [root@zlm3 08:31:45 /data/mysql/mysql3306/data]
12 #ps aux|grep mysqld
13 mysql     4315 11.5 17.8 1044468 181776 pts/1  Sl   08:31   0:00 mysqld --defaults-file=/data/mysql/mysql3306/my.cnf
14 root      4348  0.0  0.0 112640   960 pts/1    R+   08:31   0:00 grep --color=auto mysqld

创建数据库示例:

CREATE DATABASE TESE22BB
ON
(
NAME =TEST22BB,
FILENAME = 'e:test22bb.mdf',
SIZE =30MB,
MAXSIZE = 50MB
)
LOG ON
(
NAME = 'TEST22BBLOG',
FILENAME='e:test22bb.ldf',
SIZE = 10MB,
MAXSIZE = 20MB
)
GO

 

用这种方式,我们可以在指定的硬盘或U盘路径之下创建数据库。

 

注意:如果需要对数据库文件进行复制、剪切或删除操作。

 

 

查看数据库信息

EXEC sp_helpdb ‘test’

以类似查询语句的结果集的方式返回数据库的大小、拥有者、创建日期、文件路径等信息。

 

**Check out the first consistent position we need.**

CREATE TABLE创建数据表

CREATE TABLE 数据表名

创建表之前确定是否已经选择当前数据库

 

1 [root@zlm3 08:34:15 /data/backup/2018-07-31_06-29-03]
2 #cat xtrabackup_binlog_info
3 mysql-bin.000043    190    1b7181ee-6eaf-11e8-998e-080027de0e0e:1-3730229

完整语法

CREATE TABLE [数据库.[数据库所有者]] 数据表名
(
<字段名><字段的数据类型>
[DEFAULT <默认值表达式>]
|
[IDENTITY [seed,increment][NOT FOR REPLICATION] ]
[ROWGUIDCOL]
[COLLATE<COLLATION NAME>]
[PRIMARY KEY]
[NULL | NOT NULL]
[<column constraint 字段约束>]
|
[table_constraint 表约束]
|
[字段名 as 计算列表达式]
)
[ON (<文件组>)|DEFAULT]
[TEXTIMAGE_ON(<文件组>)|DEFAULT]

 

 

DEFAULT 默认值

指该字段在没有输入值的情况下默认使用的值。

**Execute "change master to" as below.**

IDENTITY标识、自增量

默认情况下,每条记录自动增加1

 1 (zlm@192.168.1.102 3306)[(none)]>change master to relay_log_file='relay-bin.000043',relay_log_pos=190,master_host='xxx';
 2 ERROR 1380 (HY000): Failed initializing relay log position: Could not find first log during relay log initialization
 3 (zlm@192.168.1.102 3306)[(none)]>show master status;
 4 +------------------+----------+--------------+------------------+------------------------------------------------+
 5 | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                              |
 6 +------------------+----------+--------------+------------------+------------------------------------------------+
 7 | mysql-bin.000004 |      206 |              |                  | 1b7181ee-6eaf-11e8-998e-080027de0e0e:1-3730229 |
 8 +------------------+----------+--------------+------------------+------------------------------------------------+
 9 1 row in set (0.00 sec)
10 
11 (zlm@192.168.1.102 3306)[(none)]>reset master;
12 Query OK, 0 rows affected (0.02 sec)
13 
14 (zlm@192.168.1.102 3306)[(none)]>show master status;
15 +------------------+----------+--------------+------------------+-------------------+
16 | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
17 +------------------+----------+--------------+------------------+-------------------+
18 | mysql-bin.000001 |      150 |              |                  |                   |
19 +------------------+----------+--------------+------------------+-------------------+
20 1 row in set (0.00 sec)
21 
22 (zlm@192.168.1.102 3306)[(none)]>set @@global.gtid_purged='1b7181ee-6eaf-11e8-998e-080027de0e0e:1-3730229';
23 Query OK, 0 rows affected (0.01 sec)
24 
25 (zlm@192.168.1.102 3306)[(none)]>show master status;
26 +------------------+----------+--------------+------------------+------------------------------------------------+
27 | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                              |
28 +------------------+----------+--------------+------------------+------------------------------------------------+
29 | mysql-bin.000002 |      150 |              |                  | 1b7181ee-6eaf-11e8-998e-080027de0e0e:1-3730229 |
30 +------------------+----------+--------------+------------------+------------------------------------------------+
31 1 row in set (0.00 sec)
32 
33 (zlm@192.168.1.102 3306)[(none)]>change master to relay_log_file='relay-bin.000043',relay_log_pos=190,master_host='xxx';
34 ERROR 1380 (HY000): Failed initializing relay log position: Could not find first log during relay log initialization
35 
36 (zlm@192.168.1.102 3306)[(none)]>show slave statusG
37 *************************** 1. row ***************************
38                Slave_IO_State: 
39                   Master_Host: xxx
40                   Master_User: test
41                   Master_Port: 3306
42                 Connect_Retry: 60
43               Master_Log_File: 
44           Read_Master_Log_Pos: 4
45                Relay_Log_File: relay-bin.000043
46                 Relay_Log_Pos: 190
47         Relay_Master_Log_File: 
48              Slave_IO_Running: No
49             Slave_SQL_Running: No
50               Replicate_Do_DB: 
51           Replicate_Ignore_DB: 
52            Replicate_Do_Table: 
53        Replicate_Ignore_Table: 
54       Replicate_Wild_Do_Table: 
55   Replicate_Wild_Ignore_Table: 
56                    Last_Errno: 0
57                    Last_Error: 
58                  Skip_Counter: 0
59           Exec_Master_Log_Pos: 0
60               Relay_Log_Space: 0
61               Until_Condition: None
62                Until_Log_File: 
63                 Until_Log_Pos: 0
64            Master_SSL_Allowed: No
65            Master_SSL_CA_File: 
66            Master_SSL_CA_Path: 
67               Master_SSL_Cert: 
68             Master_SSL_Cipher: 
69                Master_SSL_Key: 
70         Seconds_Behind_Master: NULL
71 Master_SSL_Verify_Server_Cert: No
72                 Last_IO_Errno: 0
73                 Last_IO_Error: 
74                Last_SQL_Errno: 0
75                Last_SQL_Error: 
76   Replicate_Ignore_Server_Ids: 
77              Master_Server_Id: 0
78                   Master_UUID: 
79              Master_Info_File: mysql.slave_master_info
80                     SQL_Delay: 0
81           SQL_Remaining_Delay: NULL
82       Slave_SQL_Running_State: 
83            Master_Retry_Count: 86400
84                   Master_Bind: 
85       Last_IO_Error_Timestamp: 
86      Last_SQL_Error_Timestamp: 
87                Master_SSL_Crl: 
88            Master_SSL_Crlpath: 
89            Retrieved_Gtid_Set: //No relay logs was retrieved here.
90             Executed_Gtid_Set: 1b7181ee-6eaf-11e8-998e-080027de0e0e:1-3730229
91                 Auto_Position: 0
92          Replicate_Rewrite_DB: 
93                  Channel_Name: 
94            Master_TLS_Version: 
95 1 row in set (0.00 sec)

NOT FOR REPLICATION

就是指对这个表进行复制的时候,ID主键的值是重新排列,还是延用之前的ID

 

ROWGUIDCOL

是指将一个表中的数据复制到另一个表中时,如果产生ID重复情况下,应用如何处理。

    I was stuck again,faint!T_T...

COLLATE

用于处理排序和字母大小写等问题。

 

PRIMARY KEY

设置该字段为主键

Supplemented on August 1.

NULL/NOT NULL

是否允许为空

 

字段约束

对字段中输入的数据进行规则的限制。

    After discussing with my classmate Shuaibing Zhang,I found out that the reason why I got failure above was due to not executing "reset slave all;".Therefore,it meantioned that "Could not find the first log..." when I Executed "change master to ... ".

计算列

可以创建一个本身没有任何数据的列,这个列的值由其他列来动态的生成。

比如:

PCount AS price*num

这里我们就定义了一个计算列,总价=单价*数量

 

注意:

1、不能计算主键、外键、唯一键

2、只能引用当前数据表中的字段

 

 

表约束

对插入表的数据进行限制

Execute "change master to ... "

ON

如果数据库由多个部分组成,我们可以指定数据表存储在哪个部分。

 1 (zlm@192.168.1.102 3306)[(none)]>change master to relay_log_file='relay-bin.000043',relay_log_pos=190,master_host='xxx';
 2 Query OK, 0 rows affected (0.01 sec)
 3 
 4 (zlm@192.168.1.102 3306)[(none)]>show slave statusG
 5 *************************** 1. row ***************************
 6                Slave_IO_State: 
 7                   Master_Host: xxx
 8                   Master_User: 
 9                   Master_Port: 3306
10                 Connect_Retry: 60
11               Master_Log_File: 
12           Read_Master_Log_Pos: 4
13                Relay_Log_File: relay-bin.000043
14                 Relay_Log_Pos: 190
15         Relay_Master_Log_File: 
16              Slave_IO_Running: No
17             Slave_SQL_Running: No
18               Replicate_Do_DB: 
19           Replicate_Ignore_DB: 
20            Replicate_Do_Table: 
21        Replicate_Ignore_Table: 
22       Replicate_Wild_Do_Table: 
23   Replicate_Wild_Ignore_Table: 
24                    Last_Errno: 0
25                    Last_Error: 
26                  Skip_Counter: 0
27           Exec_Master_Log_Pos: 0
28               Relay_Log_Space: 954838
29               Until_Condition: None
30                Until_Log_File: 
31                 Until_Log_Pos: 0
32            Master_SSL_Allowed: No
33            Master_SSL_CA_File: 
34            Master_SSL_CA_Path: 
35               Master_SSL_Cert: 
36             Master_SSL_Cipher: 
37                Master_SSL_Key: 
38         Seconds_Behind_Master: NULL
39 Master_SSL_Verify_Server_Cert: No
40                 Last_IO_Errno: 0
41                 Last_IO_Error: 
42                Last_SQL_Errno: 0
43                Last_SQL_Error: 
44   Replicate_Ignore_Server_Ids: 
45              Master_Server_Id: 0
46                   Master_UUID: 
47              Master_Info_File: mysql.slave_master_info
48                     SQL_Delay: 0
49           SQL_Remaining_Delay: NULL
50       Slave_SQL_Running_State: 
51            Master_Retry_Count: 86400
52                   Master_Bind: 
53       Last_IO_Error_Timestamp: 
54      Last_SQL_Error_Timestamp: 
55                Master_SSL_Crl: 
56            Master_SSL_Crlpath: 
57            Retrieved_Gtid_Set: 
58             Executed_Gtid_Set: 1b7181ee-6eaf-11e8-998e-080027de0e0e:1-3730229
59                 Auto_Position: 0
60          Replicate_Rewrite_DB: 
61                  Channel_Name: 
62            Master_TLS_Version: 
63 1 row in set (0.00 sec)

TEXTIMAGE_ON

与ON的作用类似,但是它只有在表中有Text或Image类型的字段时才有效。

 

创建数据表的示例:

use testStudent2;

CREATE TABLE student(

sid int IDENTITY PRIMARY KEY NOT NULL,

sName nvarchar(50) NOT NULL,

sAge int,

sSex bit  DEFAULT 0 NOT NULL,

sYW float DEFAULT 0 NOT NULL,

sSX float DEFAULT 0 NOT NULL,

sCount AS sYW+sSX

)

 

Analyze the relay-bin file to find out the until postion before dropping operation.

练习:

创建一个产品销售表,字段如下:pid、pname(产品名称)、pPrice(产品价格)、pNum(产品销售数量)、pCount(产品销售总价= pPrice* pNum),用CREATE语句创建这个数据表。

 

 1 [root@zlm3 04:11:50 /data/mysql/mysql3306/data]
 2 #cd /data/backup/
 3 
 4 [root@zlm3 04:12:17 /data/backup]
 5 #mysqlbinlog --base64-output=decode-rows relay-bin.000043 > 43.log
 6 
 7 [root@zlm3 04:12:47 /data/backup]
 8 #tail -20 43.log
 9 #180731  6:34:54 server id 1013306  end_log_pos 954224     Delete_rows: table id 222 flags: STMT_END_F
10 # at 954224
11 #180731  6:34:54 server id 1013306  end_log_pos 954251     Xid = 58
12 COMMIT/*!*/;
13 # at 954251
14 #180731  6:35:09 server id 1013306  end_log_pos 954312     GTID    last_committed=2    sequence_number=3    rbr_only=no
15 SET @@SESSION.GTID_NEXT= '1b7181ee-6eaf-11e8-998e-080027de0e0e:3730232'/*!*/;
16 # at 954312
17 #180731  6:35:09 server id 1013306  end_log_pos 954436     Query    thread_id=13    exec_time=0    error_code=0
18 use `sysbench`/*!*/;
19 SET TIMESTAMP=1533011709/*!*/;
20 DROP TABLE `sbtest5` /* generated by server */ //Here's the dropping operation.Therefore,the util position we need is "954251" which just below the "COMMIT/*!*/;"
21 /*!*/;
22 # at 954436
23 #180731  6:35:29 server id 1013306  end_log_pos 954479     Rotate to mysql-bin.000044  pos: 4
24 SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
25 DELIMITER ;
26 # End of log file
27 /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
28 /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

ALTER修改语句

ALTER <数据对象类型><数据对象名称>

 

ALTER DATABASE 修改数据库

Execute start slave sql_thread util clause.

修改数据库名

ALTER DATABASE test MODIFY NAME = test22

将数据库test改名为test22

 1 (zlm@192.168.1.102 3306)[(none)]>start slave sql_thread until relay_log_file='relay-bin.000043',relay_log_pos=954251;
 2 Query OK, 0 rows affected (0.00 sec)
 3 
 4 (zlm@192.168.1.102 3306)[(none)]>show slave statusG
 5 *************************** 1. row ***************************
 6                Slave_IO_State: 
 7                   Master_Host: xxx
 8                   Master_User: 
 9                   Master_Port: 3306
10                 Connect_Retry: 60
11               Master_Log_File: 
12           Read_Master_Log_Pos: 4
13                Relay_Log_File: relay-bin.000043
14                 Relay_Log_Pos: 954251
15         Relay_Master_Log_File: 
16              Slave_IO_Running: No
17             Slave_SQL_Running: No
18               Replicate_Do_DB: 
19           Replicate_Ignore_DB: 
20            Replicate_Do_Table: 
21        Replicate_Ignore_Table: 
22       Replicate_Wild_Do_Table: 
23   Replicate_Wild_Ignore_Table: 
24                    Last_Errno: 0
25                    Last_Error: 
26                  Skip_Counter: 0
27           Exec_Master_Log_Pos: 954251
28               Relay_Log_Space: 954838
29               Until_Condition: Relay
30                Until_Log_File: relay-bin.000043
31                 Until_Log_Pos: 954251
32            Master_SSL_Allowed: No
33            Master_SSL_CA_File: 
34            Master_SSL_CA_Path: 
35               Master_SSL_Cert: 
36             Master_SSL_Cipher: 
37                Master_SSL_Key: 
38         Seconds_Behind_Master: NULL
39 Master_SSL_Verify_Server_Cert: No
40                 Last_IO_Errno: 0
41                 Last_IO_Error: 
42                Last_SQL_Errno: 0
43                Last_SQL_Error: 
44   Replicate_Ignore_Server_Ids: 
45              Master_Server_Id: 0
46                   Master_UUID: 
47              Master_Info_File: mysql.slave_master_info
48                     SQL_Delay: 0
49           SQL_Remaining_Delay: NULL
50       Slave_SQL_Running_State: 
51            Master_Retry_Count: 86400
52                   Master_Bind: 
53       Last_IO_Error_Timestamp: 
54      Last_SQL_Error_Timestamp: 
55                Master_SSL_Crl: 
56            Master_SSL_Crlpath: 
57            Retrieved_Gtid_Set: 
58             Executed_Gtid_Set: 1b7181ee-6eaf-11e8-998e-080027de0e0e:1-3730231
59                 Auto_Position: 0
60          Replicate_Rewrite_DB: 
61                  Channel_Name: 
62            Master_TLS_Version: 
63 1 row in set (0.00 sec)
64 
65 (zlm@192.168.1.102 3306)[(none)]>select count(*) from sysbench.sbtest5;
66 +----------+
67 | count(*) |
68 +----------+
69 |     5000 |
70 +----------+
71 1 row in set (0.01 sec)

修改数据库大小

ALTER DATABASE test MODIFY FILE (SIZE = 500MB)

注意:不能变小,只能增大它的容量。

 

ALTER TABLE 修改数据表

最常见的操作就是修改数据表名和表中的字段。

 

Summary

添加字段

ALTER TABLE dbo.student

ADD --这个关键字代表添加

phoneNum char(20) DEFAULT '00000000',

sAddress nvarchar(100) ,

createTime DateTime DEFAULT GETDATE()

--GETDATE()代表获取系统当前时间

 

修改字段名

EXEC sp_rename ‘表名.原字段名’ , ’新字段名’ , ’COLUMN’

示例:

EXEC sp_rename 'student.createTime','regTime','COLUMN'

The simply description of rescuing data with relay log method is shown below:

修改字段类型

ALTER TABLE 表名 ALTER COLUMN 字段名 类型

示例:

ALTER TABLE dbo.student

ALTER COLUMN sAge nvarchar(30)

The precondition is that the master has a up-to-date full backup.(Xtrabackup or mysqldump)

删除字段

ALTER TABLE 表名 DROP COLUMN 字段名

示例:

ALTER TABLE dbo.student

DROP COLUMN sAddress

字段的值会被一起删除

1. Copy all the binlog files to another server which has a newly initialized instance.

修改表名

EXEC sp_rename ‘原表名’,’新表名’

示例:

EXEC sp_rename 'student','studentInfo'

DROP语句

删除数据库对象,比如:删除数据表、视图、存储过程、触发器

语法:

DROP <数据对象> <数据对象名>

2. Restore the backup on new instance and check data is restored normally.

DROP语句可以同时删除多张数据表

DROP TABLE 表1,表2,….

示例:

drop table table1,table2,table3

3. Execute "reset slave all;" to clear the original replication information(restored from master).**

DROP删除数据库

DROP DATABASE 数据库名

4. Reconfigure those binlog files with "relay-bin.xxxxxx" format together with relay-bin.index file.

练习:

用户CREATE 语句创建一个电影院相关的数据库,其中包含数据表(site)(id、row int、col int)、客户表(customer)(id int,name nvarchar(50)、phoneNum char(20))、电影表(movie)(id int 、name nvarchar(50)、mtime dateTime)

 

其中,用户电话的默认值是12345678

电影的默认时间是当前系统时间

每个表的id都必须是自增的主键

修改site数据表名为userSite

修改customer中的字段phoneNum的类型为char(50)

 

*5. Copy **those relay logs** to the proper datadir and c*hange the ownership and group of them.**

数据库相关的内容

6. Execute "change master to ... " with "relay_log_file" and "relay_log_pos".

系统数据库

7. Execute "change replication filter ... " if you're supposed to merely restore a single table.(optional)

master

存储了数据库的核心对象信息,没有这个数据库Sql Server就不能正常运行。

8. Execute "start slave sql_thread until ... " to restore data until the position you need.(both relay_log_pos and sql_before_gtids is okay)

msdb

提供了SQL Server的代表服务中要执行的任务和调试计划

 

model

被SQL server用于数据库模板信息的存储

tempdb

用来存放一些临时信息,重启数据库服务端时,它存储的信息会被清空。

分离数据库

数据库默认的存储位置

C:Program FilesMicrosoft SQL ServerMSSQL10.MSSQLSERVERMSSQLDATA

如果我们需要将它移动位置的话,就需要首先分离数据库:

右击数据库图标弹出菜单à任务à分离à弹出分离数据库窗口à选中”删除连接”à确定

这样我们就可以复制和剪切数据库了。

附加数据库

用于将已经分离的数据库文件mdf、ndf(数据库辅助文件)、ldf 添加到数据库服务端中进行运行。

右击“数据库”à在弹出菜单中选择”附加”à在“附加数据库”窗口中点击添加 à 选择mdf文件à确定à确定

备份与还原数据库

备份

相对于分离数据库,备份的时候我们不需要停止数据库的运行。备份可以在用户正在使用数据库的状态下进行。在指定数据库的右键菜单中à任务à备份à在“目录-备份到”区域中指定数据库备份的路径(默认路径是在sql server的安装目录下,如果需要改变备份路径,需要先删除默认路径,再点击添加)

还原

右击“数据库”à在弹出菜单中选择”还原数据库”à在“还原数据库”窗口中指定 ”设备源” à点击”设备源”后的 ”…” 按钮à添加à选择备份文件à确定à选中数据库前方的对勾à选择目标数据库下拉列表à确定

数据库备份文件的扩展名是bak

sqlServer_束

约束就是添加一种限制,为字段或表添加限制,以确保数据符合用户制定的规则。

约束的分类

根据约束范围

实体约束

域约束

参照完整性约束

根据约束的方法

主键约束

外键约束

唯一约束

CHECK约束

DEFAULT约束

规则

默认值

约束的概念

域约束

域约束用来处理一个或多个字段。

比如:商品价格不能为负数。

当用户插入一行数据时,只要有一字段不符合约束条件,那么整条记录都无法插入。

实体约束

它用来针对行进行约束。

比如:要求每个学生的姓名、电话、地址都不能出现重复。

同样的值不能在其行出现。

参照完整性约束

某一字段的值,必须包含于(当前表或其他表的)其他字段值的范围内。

约束的命名

主键约束的命名:PK_student,PK代表主键Primary Key 。

CHECK约束:CK_ students_4j432j,CK_ students_ageNotSmall0

键约束

主键、外键、替换键、倒置键

主键约束

确保主键的值是唯一的。

如何给一张没有主键的表添加主键

ALTER TABLE Table_1

ADD CONSTRAINT PK_table111

PRIMARY KEY (id)

外键约束

就是为了确保数据的准确性,比如:确保每一条论坛贴子的发贴人都是真正存在于用户表的。

通过sql manageMent studio 来添加外键

1、确定需要被限制的数据表。

2、进入被限制的数据表的“设计”视图,在空白处点击右键菜单中的“关系”项。

3、点击添加按钮新建一个约束。

4、选中新添加的约束,在右侧的“表和列规范”后面有一个按钮”…”,点它打开外键关系编辑窗口。

5、选中相应的表的相应字段即可。

 

外键约束的双向性

当两张表之间添加了外键之后,它所建立的约束对这两张表的行为都是具有约束作用的:

1、 外键引用表,不能添加主键表中不存在的值。

2、 主键表中不能删除已经被外键表引用的主键。

 

通常外键在外键引用表上添加

首先要区别哪张表是主键表(是指用已经存在的值作为约束范围),哪张表是外键表(是指添加数据时被约束必须符合范围的那张表) 。

 

创建外键的时候,通常是在外键表上创建的。

练习:

1、 用create创建学生表(sid、sname、sage、cid)和班级表(cid、cname、cteacher)

2、 对这两张表添加外键约束,班级表是主键表、学生表是外键引用表。

3、 在学生表中添加一个不存在的班级试一下。

4、 在班级表中删除一个已经被引用的班级试一下。

 

通过SQL语句来创建外键

在创建数据表的同时对某个字段添加外键

CREATE TABLE ticketVIP
(
tid int identity primary key not null,
cid int not null
FOREIGN KEY REFERENCES customer(id)
)

其中,FOREIGN KEY REFERENCES之后的表名(字段名)就是表示字段与哪张表的哪个字段建立外键关系。

查询一张表中的外键信息

语法:

EXEC sp_helpconstraint 表名

示例:

EXEC sp_helpconstraint ticketVIP

本文由澳门新葡亰平台官网发布于数据库,转载请注明出处:SQLServer插入数据,NET学习笔记011SqlServer基础知识

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。