三种sql语句:html
SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。SQL语言分为3种类型: #一、DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER #二、DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT #三、DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE
#1. 操做文件夹(库)
增:create database db1 charset utf8;
能够由字母、数字、下划线、@、#、$ 区分大小写 惟一性 不能使用关键字如 create select 不能单独使用数字 最长128位
查:show databases;
show create database db1;
select database();
选择数据库:USE db1;
删除: drop database db1;
改:alter database db1 charset latin1;
只能修改库的字符集,改不了其余。
操做文件(表)
先切换到文件夹下:use db1
create table t1(id int) engine=innodb default charset=utf-8; 增:create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);
1. 在同一张表中,字段名是不能相同
2. 宽度和约束条件可选
3. 字段名和类型是必须的
复制表:create table t2 select * from t1; 不会复制主键、外键和索引
只复制表结构:create table t2 like t1;
create table t2 select * from t1 where 1=2; #设置一个不存在的条件
查:show tables
desc t1;
删:drop table t1;
改:alter table t1 rename t2; #修改表名
alter table t1 engine=innodb; #修改表引擎
修改字段:
alter table t1 modify name char(3); #修改字段约束条件,不能改字段名
alter table t1 change name name1 char(2); #change能够修改字段名同时能够修改字段约束条件
注意:修改约束条件的时候必须与建立字段时同样将各属性写完整了,可是有个例外,给主键设置自增时,不能写primary key,不然会报多主键错误。
删除主键也不用常规modify的方式,须要:alter table t1 drop primary key;
增长字段:
alter table t1 add id int;
alter table t1 add id int first; #增长字段做为第一个字段
alter table t1 add id int afer name; #在某字段后面增长新字段
删除字段:
alter table t1 drop id;
字段的约束条件
约束条件直接用空格分开
not null #非空
default xx #默认值
primary key 或 primary key() #设置为主键,建立复合主键:create table t1(id int,name varchar(10),primary key(id,name)) 增长:alter table t1 add primary key(c1,c2);
auto_increment #自增
unique 或 unique key() #惟一键
foreign key() references x() #外键
外键操做mysql
1:建立一个父表,主键做为子表的外键: create table province( pId int primary key auto_increment, pName varchar(20) ); 2:建立子表,外键是父表的主键: create table user( userId int primary key auto_increment, userName varchar(40), pid int, foreign key(pid) references province(pId) ); 给一张表添加外键,即给子表的外键添加主键的规则: 在子表声明一个字段pid int,用于做为子表的外键,foreign key(子表的外键字段) references 父表的表名(父表的主键的字段名); 3:当建立好数据表时添加外键约束: alter table user add foreign key(pid) references province(pId); alter table 子表的数据表名 add foreign key(子表的外键名称) references 父表的数据表名称(父表的主键名称);
外键注意:
1.1 sql建表时必须先创建被关联表,插入数据必须先插入被关联表的数据
1.2 外键改变时动做cascade set null restrict no action
1.3 多对多,须要先建立第三张表,第三表储存前两张表的关系对应,第三张表建立两个外键指向前两张表。
1.4 一对一,两张表的关系为第二张表是第一张表信息的补充,在第二张表中建立外键指向第一张表,而且设置unique。sql
创建索引数据库
普通索引INDEX:加速查找 汇集索引:主键索引,叶子节点存放了全部字段的数据
辅助索引:普通索引和惟一索引,叶子节点只存放该字段的数据 惟一索引: -主键索引PRIMARY KEY:加速查找+约束(不为空、不能重复) -惟一索引UNIQUE:加速查找+约束(不能重复) 联合索引: -PRIMARY KEY(id,name):联合主键索引 -UNIQUE(id,name):联合惟一索引 -INDEX(id,name):联合普通索引
举个例子来讲,好比你在为某商场作一个会员卡的系统。 这个系统有一个会员表 有下列字段: 会员编号 INT 会员姓名 VARCHAR(10) 会员身份证号码 VARCHAR(18) 会员电话 VARCHAR(10) 会员住址 VARCHAR(50) 会员备注信息 TEXT 那么这个 会员编号,做为主键,使用 PRIMARY 会员姓名 若是要建索引的话,那么就是普通的 INDEX 会员身份证号码 若是要建索引的话,那么能够选择 UNIQUE (惟一的,不容许重复) #除此以外还有全文索引,即FULLTEXT 会员备注信息 , 若是须要建索引的话,能够选择全文搜索。 用于搜索很长一篇文章的时候,效果最好。 用在比较短的文本,若是就一两行字的,普通的 INDEX 也能够。 但其实对于全文搜索,咱们并不会使用MySQL自带的该索引,而是会选择第三方软件如Sphinx,专门来作全文搜索。 #其余的如空间索引SPATIAL,了解便可,几乎不用
#方法一:建立表时 CREATE TABLE 表名 ( 字段名1 数据类型 [完整性约束条件…], 字段名2 数据类型 [完整性约束条件…], [UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY [索引名] (字段名[(长度)] [ASC |DESC]) ); #方法二:CREATE在已存在的表上建立索引 CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 ON 表名 (字段名[(长度)] [ASC |DESC]) ; #方法三:ALTER TABLE在已存在的表上建立索引 ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 (字段名[(长度)] [ASC |DESC]) ; #删除索引:DROP INDEX 索引名 ON 表名字;
举例:
#方式一 create table t1( id int, name char, age int, sex enum('male','female'), unique key uni_id(id), index ix_name(name) #index没有key ); #方式二 create index ix_age on t1(age); #方式三 alter table t1 add index ix_sex(sex); #查看 mysql> show create table t1; | t1 | CREATE TABLE `t1` ( `id` int(11) DEFAULT NULL, `name` char(1) DEFAULT NULL, `age` int(11) DEFAULT NULL, `sex` enum('male','female') DEFAULT NULL, UNIQUE KEY `uni_id` (`id`), KEY `ix_name` (`name`), KEY `ix_age` (`age`), KEY `ix_sex` (`sex`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1
数据操做spa
插入数据:
1. 插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n); 语法二: INSERT INTO 表名 VALUES (值1,值2,值3…值n); 2. 指定字段插入数据 语法: INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…); 3. 插入多条记录 语法: INSERT INTO 表名 VALUES (值1,值2,值3…值n), (值1,值2,值3…值n), (值1,值2,值3…值n); 4. 插入查询结果 语法: INSERT INTO 表名(字段1,字段2,字段3…字段n) SELECT (字段1,字段2,字段3…字段n) FROM 表2 WHERE …;
更新数据:rest
语法: UPDATE 表名 SET 字段1=值1, 字段2=值2, WHERE CONDITION; 示例: UPDATE mysql.user SET password=password(‘123’) where user=’root’ and host=’localhost’;
删除数据:code
语法: DELETE FROM 表名 WHERE CONITION; 示例: DELETE FROM mysql.user WHERE password=’’; 注意:delete from table1 这条命令能够删除表中全部数据,但不会重置自增字段属性的记录。delete不是用来清空表的,而是用来删除特定的数据,若是要清空表用truncate table1。