SQL基础语法(1)
这篇blog是SQL基础语法,只是作为我平时查阅和备份,仅适合初学者学习阅读,高手绕行。
转载时注明地址http://fuchangle.iteye.com/blog/1772395
SQL的全称是Structured Query Language, 也就是结构化查询语言。SQL是操作和检索关系型数据库的标准语言,标准SQ;语言可用于操作任何的关系数据库。
作用:
1.在数据库中检索需要的信息
2.对数据库的信息进行更新
3.改变数据库的结构
4.更改系统的安全设置
5.增加用户对数据库或表的许可权限
标准SQL语句通常可分为如下几种类型:
1.查询语句:主要由于select关键字完成,查询语句是SQL语句最复杂,功能也最丰富的语句。
2.DML语句(Data Manipulation Language,即数据库操作语言):主要由insert,update和delect三个关键字完成。
3.DDL语句(Data Definition Language,即数据库定义语言): 主要由create、alter、drop和truncate四个关键字完成
5 DCL语句(Data Controll Language,即数据库控制语言):主要由grant和revoke两个关键字完成。
6 事务控制语句:主要由commit、rollback和savepoint三个关键字.
数据库最基本的数据库对象是数据表,数据表是存放数据的逻辑单元。但数据库里绝不仅包括数据表
对象名称--对应关键字--描述
表 --table--表是存储数据的逻辑单元,以行和列的形式存在;列就是字段,行就是记录
数据字典-- --就是系统的表,存储数据库相关信息的表,系统表里的数据通常由数据库系统维护,程序员通常不应该手动修改系统表及内部的数据,程序员只可查看系统表的数据。
约束--constraint--执行数据校验的规则,用于保证了数据完整性的规则
视图--view--一个或多个数据表里的逻辑显示,视图并不存储数据。
索引--index--用于提高查询的性能,相当于书的目录
函数--function--用于完成一次特定的计算,具有一个返回值
存储过程--procedure--用于完成一次完整的业务逻辑,没有返回值
触发器--tigger--相当于一个事件监听器,当数据库发生特定事件后,触发器被触发,完成响应的处理。
建立数据表只是建立表结构,就是指定该数据表有多少列,每列的数据类型,所以建表语句的重点就是园括号里的列定义,列定义由列名、列类型和可选的默认值组成。
如果使用子查询建表则可以在建表同时插入数据。
create table hahaasselect * from user_inf;
DROP DATABASE IF EXISTS databaseWeb; --如果存在,则删除数据库databaseWebCREATE DATABASE databaseWeb CHARACTER SET utf8; --创建数据库,使用utf8编码USE databaseWeb; --切换到数据库databaseWebset Names 'gbk';--控制台使用gbk编码DROP TABLE IF EXISTS tb_person;CREATE TABLE tb_person(id INTEGER AUTO_INCREMENT COMMENT 'id',name VARCHAR(45) COMMENT '姓名',english_name VARCHAR(45) COMMENT '英文名',age INTEGER UNSIGNED COMMENT '年龄',sex VARCHAR(45) COMMENT '性别',birthday DATE COMMENT '出生日期',description TEXT COMMENT '备注',create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP() COMMENT '创建时间',PRIMARY KEY(id));INSERT INTO tb_person(name,english_name,age,sex,birthday,description) values('刘京华','Helloweenvsfei','25','男','1982-08-09','无备注');INSERT INTO tb_person(name,english_name,age,sex,birthday,description) values('科特柯本','Kurt Cobain','27','男','1967-02-20','Nirvana');INSERT INTO tb_person(name,english_name,age,sex,birthday,description) values('李四','Faye','31','女','1969-08-08','狮子座');INSERT INTO tb_person(name,english_name,age,sex,birthday,description) values('张三','Foo Bar','18','女','2008-08-08','');alter table hehemodify hehe_id varchar(255);
alter table heheadop aaa;
alter table heherename to wawa;
alter table wawachange bbb ddd int;
--增加非空约束alter table hehemodify hehe_gender varchar(2) not null;--取消非空约束alter table hehemodify hehe_nanes varchar(2) null;
--建表时创建唯一约束,使用表级的约束语法建约束create table unique_test2{--建立了非空约束,着意味着test_id不可以为NULLtest_id int not null,test_name varchar(255),test_pass varchar(255),--使用行级约束语法建唯一约束unique(test_name),--使用表级约束语法建唯一约束,而且指定约束名constraint test_uk unique(test_pass)};上面建表语句为test_name、test_pass分别建立唯一约束,这意味着两列不能为空,除此之外还可以为这两列组合建立唯一约束,--建表时创建唯一约束,使用表级约束语法建约束create table unique_test3{--建立了非空约束,着意味着test_id不可以为NULLtest_id int not null,test_name varchar(255),test_pass varchar(255),--使用表级约束语法建唯一约束,指定两列组合不能为空constraint test3_uk unique(test_name, test_pass)};--添加唯一约束alter table unique_test3add unique(test_name, test_pass);
--为haha表的text_name列增加唯一约束alter table_hahamodify test_name varchar(255) unique;
alter table unique_test3drop index_test3_uk
create table primary_test(--建立主键约束test_id int primary key,test_name varhar(255));建表时创建主键约束,使用表级约束语法create table primary_test2(test_id int not null,test_name varchar(255),test_pass varchar(255),#指定主键名为test2_pk,对大多数数据库有效,但对mysql无效#MySQL数据库中该主键约束依然是primaryconstraint test2_pk primary key(test_id));建表时创建主键约束,以多列建立组合主键,只能使用表级约束语法:create table primary_test3(test_name varchar(255),test_pass varchar(255),#使用表级约束建立多列组合主键约束primary key(test_name, test_pass));
#删除主键约束alter table primary_test3drop primary key;
#使用列级约束语法增加主键约束alter table_primary_test3modify test_name varchar(255) primary key;#使用表级约束语法增加主键约束alter table primary_test3add primary key(test_name,test_pass);
create table primary_test4(#建立主键约束,使用自增长test_id int auto_increment primary key,test_name varchar(255),test_pass varchar(255),);
#为了保证从表参照的主表存在,通常应该先创建主表create table teacher_table1(#auto_increment:代表数据库的自动编号策略,通常用作数据库的逻辑主键teacher_id int auto_increment,teacher_name varchar(255),primary key(teacher_id));create table student_table1(student_id int auto_increment primary key,student_name varchar(255),#指定java_teacher参照到teacher_table的teacher_id列java_teacher int references teacher_table1(teacher_id));
#为了保证从表参照的的主表存在,通常应该先建主表create table teacher_table(#auto_increment:代表数据库的自动编码策略,通常用作数据表的逻辑主键teacher_id int auto_increment,teacher_name varchar(255),primary key(teacher_id));create table student_table(student_id int auto_increment primary key,studnet_name varchar(255),#指定java_teacher参照到teacher_table的teacher_id列java_teacher int,foreign key(java_teacher) references teacher_table(teacher_id));
create table teacher_table(teacher_name varchar(255),teacher_pass varchar(255),#以两列建立组合主键primary key(teacher_name, teacher_pass));create table student_table(#为本表建立主键约束student_id int auto_increment primary key,student_name varchar(255),java_teacher_name varchar(255),java_teacher_pass varchar(255),#使用表级约束语法建立外键约束,指定两列的联合外键foreign key(java_teacher_name, java_teacher_pass)references teacher_table(teacher_name, teacher_pass));
#删除student_table3表上名为student_talbe_ibkf_1的外键约束alter table student_tabledrop foreign key student_talbe_ibkf_1;
#修改student_table的数据表,增加外键约束alter table student_tableadd foreign key(java_teacher_name, java_teacher_pass)references teacher_table(teacher_name, teacher_pass);
#使用表级约束语法建立外约束键,且直接参照自身create table foreign_test(foreign_id int auto_increment primary key,foreign_name varchar(255),#使用该表的refer_id参照到本表的foreign_id列refer_id int,foreign key(refer_id) references foreign_test(foreign_id));
create table teacher_table(teacher_id int auto_increment,teacher_name varchar(255),primary key(teacher_id));create table studnet_table(#为本表建立主键约束student_id int auto_increment primary key,studnet_name varchar(255),java_teacher intforeign key(java_teacher) references teacher_table(teacher_id)on delete cascade #也可以使用on delete set null);
create table check_test(emp_id int auto_increment,emp_name varchar(255),emp_aslary decimal,#创建CHECK约束check(emp_salary>0));