DDL
一身报国有万死,双鬓向人无再青。
数据库
数据库DDL、DCL、DML语句
DDL,Data Definition Language,数据库定义语言 用于定义和管理数据库所有对象的语言,包括:CREATE,ALERT,DROP,TRUNCATE
DML,Data Manipulation Language,数据库操作语言 SQL中处理数据等操作,包括: SELECT,INSERT,UPDATE,DELETE,CALL,EXPLAIN PLAN,LOCK
DCL,Data Control Language,数据库控制语言 用来授予或回收访问数据库和某种特权并控制数据库操纵事务发生的时间及效果,对数据库实行监控,包括: COMMIT,SAVEPOINT,ROLLBACK,SET TRANSACTION
DDL
数据库及表的创建与修改
create创建
创建数据库
create database [Library]/*数据库名*/
ON PRIMARY
(NAME='Library',filename='D:\DB\Lib.mdf',
size=5mb,maxsize=unlimited,filegrowth=1040kb)
LOG ON
(
NAME='Libarary_Log',filename='D:\DB\Lib_log.LDF',
size=1088kb,maxsize=2048gb,filegrowth=10%
)
创建表
create table Borrow/*表名*/(
BorrowID int primary key not null,/*设置主键*/
UserID varchar(20) not null,
BookID int not null,
BorrowBeginDate datetime not null,
BorrowEndDate datetime not null,
ManagerID varchar(20) not null,
foreign key(BookID) references Book(BookID),/*设置外键*/
foreign key(UserID) references Users(UserID)
)
alter修改
alter database Library/*数据库名*/
modify file(
name=Library,//name为当前需要修改的数据库
size=20mb,
maxsize=20mb
drop删除
drop table Student/*表名*/
drop database Library1/*数据库名*/
用户自定义完整性
添加\修改这些约束:
/*值自动递增*/
create table student(
Sno int identity(1,1) primary key,
Sname varchar(100)
)
这样我们的Sno字段就可以实现自增了,第一个参数是标识种子(就是开始的值),第二个参数是标识增值(每次增加多少)
alter table<表名>modify <列名><数据类型>[约束]
alter table<表名>change<旧列名><新列名><数据类型>[约束]
1:向表中添加字段
Alter table [表名] add [列名] 类型
2: 删除字段
Alter table [表名] drop column [列名]
3: 修改表中字段类型 (可以修改列的类型,是否为空)
Alter table [表名] alter column [列名] 类型
4:添加主键
Alter table [表名] add constraint [ 约束名] primary key( [列名])
5:添加唯一约束
Alter table [表名] add constraint [ 约束名] unique([列名])
6:添加表中某列的默认值
Alter table [表名] add constraint [约束名] default(默认值) for [列名]
7:添加约束
Alter table [表名] add constraint [约束名] check (内容)
8:添加外键约束
Alter table [表名] add constraint [约束名] foreign key(列名) referencese 另一表名(列名)
删除外键约束
Alter table [主键表名] drop constraint [约束名]
9:删除约束
Alter table [表名] drop constraint [约束名]
10:重命名表
exec sp_rename '[原表名]','[新表名]'
11:重命名列名
exec sp_rename '[表名].[列名]','[表名].[新列名]'
其它
获取系统当当前时间:getdate()
如将列值设置为系统当前时间:
ALTER TABLE [表名] ADD CONSTRAINT [约束标识名] DEFAULT (getdate()) FOR [列名];
在日期中添加或减去指定的时间:
DATEADD() 函数功能:在日期中添加或减去指定的时间间
语法:DATEADD(datepart,number,date)
date 参数是合法的日期表达式(如果是某一列,该列需要有初始值)。number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。
datepart 参数可以是下列的值:
[]
下面已系统当前时间(getdate())为例:
[]
on delete操作
restrict(约束): 当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。
no action: 意思同restrict.即如果存在从数据,不允许删除主数据。
cascade(级联): 当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。
set null: 当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。
on update操作
restrict(约束): 当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许更新。
no action: 意思同restrict.
cascade(级联): 当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则也更新外键在子表(即包含外键的表)中的记录。
set null: 当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。
表连接查询
INNER JOIN 关键字在表中存在至少一个匹配时返回行。INNER JOIN 与 JOIN 是相同的。
修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
root 密码错误:Access denied for user ‘root‘@‘localhost‘ (using password: YES)
一、客户端连接mysql,问题:1251 client does not support …
二、解决
1.查看用户信息
select host,user,plugin,authentication_string from mysql.user;
备注:host为 % 表示不限制ip localhost表示本机使用 plugin非mysql_native_password 则需要修改密码
2.修改用户密码
ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
更新user为root,host为% 的密码为123456
ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’; 更新user为root,host为localhost 的密码为123456
row_number()实现topn查询
SQL Server ROW_NUMBER()函数简介
ROW_NUMBER()
是一个Window函数,它为结果集的分区中的每一行分配一个连续的整数。 行号以每个分区中第一行的行号开头。
以下是ROW_NUMBER()
函数的语法:
ROW_NUMBER() OVER (
[PARTITION BY partition_expression, ... ]
ORDER BY sort_expression [ASC | DESC], ...
)
网站日志表:ods_weblog_detail
查询每天访问量前10的请求路径(request),将生成表t_everyday_request_count
CREATE table `t_everyday_request_count` as
select a.* from
(select daystr,request,count(request) as request_counts,
row_number() over (partition by daystr order by count(request) desc) as od
from ods_weblog_detail
group by request,daystr
having request is not null ORDER BY daystr asc,request_counts desc) a
where a.od<=10;