sql语句--------基本

三种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。
相关文章
相关标签/搜索