sql语句
-
1、DDL(Data Definition Language)
用于定义数据库、表、视图、索引和触发器等,Create(创建)、alter(修改表定义)、drop(删除) -
2、DML(Data Manipulation Language)
用于插入、查询、更新、删除数据。insert、select、update、delete -
3、DCL(Data Control Language)
用于控制用户的访问权限。grant(授权)、revoke(回收权限)
个人觉得数据库中更喜欢MySQL,主要MySQL优势有 开源、跨平台、价格优势、功能强大且方便
如下整理了些sql知识点,如有错误望指正。
数据类型
- 整数类型:字节数
整数类型 | 字节数 |
---|---|
TINYINT | 1 |
SMALLINT | 2 |
MEDIUMINT | 3 |
INT | 4 |
INTEGER | 4 |
BIGINT | 8 |
- 浮点类型
浮点类型 | 字节数 |
---|---|
FLOAT | 4 |
Double | 8 |
DECIMAL(M,D)/DEC(M,D) :M+2
定点数范围是根据精度确定的。3.33
- 时间日期类型
时间日期类型 | 字节数 | 备注 |
---|---|---|
YEAR | 1 | |
DATE | 4 | YYYY-MM-DD |
TIME | 3 | CURRENT_DATE() NOW() |
DATETIME | 8 | |
TIMESTAMP | 4 |
- 字符串类型
字符串类型 | 最大字节 | 备注 |
---|---|---|
CHAR | 255 | char(5) |
Varchar | 65535 | 可变长 |
TEXT | TINYTEXT、MEDIUMTEXT、TEXT、LONGTEXT | |
ENUM | 单个值 | |
SET | 多个值 |
- 二进制类型
二进制类型 | 最大字节 | 备注 |
---|---|---|
BINARY(n) | n | 允许长度为0-n的定长二进制字符串 |
VARTBINARY(n) | n +1 | 允许长度为0-M的变长二进制字符串 |
BIT(n) | 64 | n位二进制数据 |
TINYBLOB(n) | 255 | n位二进制数据 |
BLOB | (2^16-1) | 比如存储图片、音频、视频等,地址,读取速度比较慢 |
MEDIUMBLOB | (2^24-1) | |
LONGBLOB | (2^32-1) |
操作MySQL数据库
- 登录数据库系统
mysql -h localhost -u root -p
-h :host(主机名) -u :username(用户名) -p:password(密码)
- 查看现有的数据库
show databases
- 创建数据库
create database 数据库名;
eg:
create database testdb;
- 删除数据库
drop database 数据库名;
eg:
drop database testdb;
- 操作表
- 创建表
use 数据库名;
create table 表名(属性名 数据类型 [完整性约束],
属性名 数据类型 [完整性约束],……);
eg:
use example;
create table example0(id int,name varchar(20),sex boolean);
- 创建表(oracle)
语法:create table 表名(列名 1 数据类型,…,列名 n 数据类型) tablespace 表空间
eg:
create table student(
stu_id number not null,
stu_name varchar(20),
stu_age number,
status varchar(3),
vesion number default 0 )
tablespace users;
- 创建表的主键
主键:特殊的字段,能够唯一标识每条记录,不能重复
目的:为了MySQL能以最快的速度查找到该记录
单字段主键:
语法:属性名 数据类型 primary key
eg:
create table example1(stu_id int primary key,stu_name varchar(20),stu_sex boolean);
多字段主键:
语法:primary key(属性1,……,属性n)
eg:
create table example2(stu_id int,
course_id int,
grade float,
primary key(stu_id,course_id));
- 创建表的外键
外键:与父表建立关系的字段
原则:必须依赖于父表已存在的主键
目的:保证数据的完整性
语法:constraint 外键别名 foreign key(字段1.1,字段1.2) references 主表名(字段2.1,字段2.2)
eg:
create table example3(
id int primary key,
stu_id int.course_id int.constraint FK_STU_COURSE foreign key(stu_id,course_id) references example2(stu_id,course_id));
注:外键一定要和主表主键的类型一致
- 创建表的相关完整性约束
约束 | 语法 | 备注 |
---|---|---|
非空约束 | 属性名 类型 not null | |
唯一约束 | 属性名 类型 unique | |
自增长 | MySQL: 属性名 类型 auto_increment;Mssql : 属性名 类型 identity(初始,递增) | 要求:类型必须是整形;注:如果插入到最后一个标识为6,删除掉这个6后,后续则从7开始 |
默认值 | 属性名 类型 default 默认值 |
eg:
create table example4(
id int not null primary key auto_increment,
stu_id int unique,name varchar(20) not null,
address varchar(255) default 'shanghai');
- 查看表结构
基本结构:
语法:
数据库 | 语法 |
---|---|
MySQL | describe 表名;/desc 表名; |
Mssql | select 列名 from sys.objects where name = ‘表名’ ;select 列名 from information_schema.columns where table_name = ‘表名’ ; |
Oracle | desc 表名; |
eg:
describe example;
desc example;
详细结构:
语法:
数据库 | 语法 |
---|---|
MySQL | show create table 表名; |
Mssql | sp_help 表名 |
eg:
show create table example;
- 修改表
修改表名
语法:
MySQL : use 数据库名;alter table 旧表名 rename [to] 新表名
eg:
show tables;alter table example rename user;
MSSQL : sp_rename ‘旧表名’ ,‘新表名’
查看当前数据库下所有的表:show tables;
注:更改对象名的任一部分都可能会破坏脚本和存储过程。
修改字段:
语法:
MySQL: alter table 表名 change 旧属性名 新属性名 新属性类型
MySQL: alter table 表名 alter column 属性名 属性新类型
eg:
修改字段类型:
MySQL:
alter table example change stu_id stu_id int(4);
MySQL :
alter table example alter column stu_name varchar(30)
修改字段名和类型:
MySQL :
alter table example1 change stu_id id int(11);
Mssql :
exec sp_rename 'example.stu_id','id'
- 新增字段
语法:
alter table 表名 add 新属性名 新属性类型 [完整性约束] [first | after 原有字段]
eg :
新增无完整性约束的字段:
alter table user add telephone varchar(20);
新增有完整性约束的字段:
alter table user add age int not null;
将字段添加到第一位:
alter table user add num int primary key first;
将字段添加到某个字段之后:
alter table user add address varchar(255) after telephone;
- 删除字段
语法:
MySQL : alter table 表名 drop 属性名
Mssql : alter table 表名 drop column 属性名
eg: alter table user drop id;
- 修改字段排列顺序
将字段修改到首位
语法:alter table 表名 modify 属性名 属性类型 [完整性约束][first]
eg:
alter table user modify name varchar(20) first;
将字段修改到指定位置
语法:alter table 表名 modify 属性名 属性类型 [完整性约束] [after 原有字段]
eg:
alter table user modify address varchar(255) after age;
- 删除外键
语法:
MySQL : alter table 表名 drop foreign key 外键名
Mssql : alter table 表名 drop constraint 外键名
eg:
alter table example drop foreign key FK_STU_COURSE;
- 删除表
语法:drop table 表名
eg : drop table example;
注:
在删除表的时候要谨慎,以避免误删,导致数据丢失,所以在删除前最好做好备份工作。
在删除表时,如果当时表存在外键,则先删除外键,再删除该表。
在删除有关关键外键表时,则先删除子表[存在外键的表],再删除主表
Oracle 特殊数据表-dual
一般的查询 select 列名 from 表名,但是有时候表并不十分明确,比如获取当前时间。其意义在于提供强制的数据源。
eg :
Select * from dual
Select 5+8*9 from dual
Select sysdate from dual