您的位置:首页 > 数据库

sql语句

2015-09-08 17:51 363 查看
ACID
事务是恢复和
并发控制的基本单位。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为
ACID特性
原子性(atomicity)。
一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。
事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一
个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。
持续性也称永久性(permanence),指一个事务一旦提交,它对
数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。 

    DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
 DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
 DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)  控制用户权限
02.连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码]   
03.创建数据库:create database [库名]   
04.显示所有数据库: show databases;   
05.打开数据库:use [库名]   
06.当前选择的库状态:SELECT DATABASE();   
07.创建数据表:CREATE TABLE [表名]([字段名] [字段类型]([字段要求]) [字段参数], ......);   
08.显示数据表字段:describe 表名;   
09.当前库数据表结构:show tables;   
10.更改表格    
11.  ALTER TABLE [表名] ADD COLUMN [字段名] DATATYPE     
12.  说明:增加一个栏位(没有删除某个栏位的语法。   
13.  ALTER TABLE [表名] ADD PRIMARY KEY ([字段名])      
14.  说明:更改表得的定义把某个栏位设为主键。   
15.  ALTER TABLE [表名] DROP PRIMARY KEY ([字段名])   ?
16.  说明:把主键的定义删除。   
17.显示当前表字段:show columns from tablename;   
18.删库:drop database [库名];   
19.删表:drop table [表名];   
20.数据操作   
21.添加:INSERT INTO [表名] VALUES('','',......顺序排列的数据);  
为指定字段插入:insert into 表名(属性名) values();
插入多条数据:insert into 表名(属性名) values(),(),();
22.查询:
1ad20
SELECT * FROM [表名] WHERE ([条件]);   
23.建立索引:CREATE INDEX [索引文件名] ON [表名] ([字段名]);   
24.删除:DELETE FROM [表名] WHERE ([条件]);   
25.修改:UPDATE [表名] SET [修改内容如name = 'Mary'] WHERE [条件];   
26.  
27.导入外部数据文本:   

38.一. 增删改查操作   
41.1. 增:   
42.insert into 表名 values(0,'测试');   
43.注:如上语句,表结构中有自动增长的列,也必须为其指定一个值,通常为0   
44.insert into 表名(id,name) values(0,'尹当')--同上   
45.2.删数据:   
46.delete from 表名;   
47.delete from 表名 where id=1;   
48.删除结构:   
49.删数据库:drop database 数据库名;   
50.删除表:drop table 表名;   
51.删除表中的列:alter table 表名 drop column 列名;   
52.3. 改:   
53.修改所有:updata 表名 set 列名='新的值,非数字加单引号' ;   
54.带条件的修改:updata 表名 set 列名='新的值,非数字加单引号' where id=6;   
55.4.查:   
56.查询所有的数据:select *from 表名;   
57.带条件的查询:   
58.select *from 表名 where 列名=条件值;   
59.Select * from 表名 where 列名 not like(like) '字符值'   
60.分页查询:select *from 表名 limit 每页数量 offset 偏移量;   
select id from user order by id src;升序查询
select id from user order by id desc;降序查询
select max(id) from user ;
select avg(id) from user ;
select min(id) from user ;
select name from user where id =(select max(id) from user);
select name,max(id) from user group by name;分组 
select name from user group by name;分组
select name,max(id) from user group by name having max(id)>2;对分组的条件进行限制
_代表一个字母   %代表0个或多个字母
like一般情况下等价于=号,除了通配符
group by 只显示每个分组的一条记录  
select set,froup_concat(name) from employee group by sex;每个分组中指定字段值都显示出来
select set from employee group by sex,name;先按性别,然后按名字
select name from user where name like "_a%"
select name from teacher join  student on(teacher.name=student.name); 两个表的连接判断
select distinct name ,password from user 去掉重复的输出
select count(*) from user 计算行
select *from student left join teacher on teacher.id= student.id;   左连接
select *from student rigth join teacher on teacher.id= student.id; 右连接
左连接和右连接是外连接
select *from student full join teacher on student.id= student.id; 完全内连接    两个表存在相同意义的字段
grade int  constraint id_fk foreign key (id) references student (id)
alter table student add constraint  fk_a  foreign key(id) references teacher(id)  在原有表中添加外键
create table grade
(id int ,name varchar(10) default 'name',constraint id_fk foreign key (id) references student (id))   创建有外键的表
update 表名 set name="" where id=1;
建立索引:CREATE INDEX [索引文件名] ON [表名] ([字段名](字段长度,可不写)); 
create table(id int,index(id));
删除索引:drop  index 索引文件名 on 表名
加快查询速度,创建和维护索引耗费时间,索引需要占用物理空间,数据处理是,动态的维护索引,造成数据的维护速度降低了
索引的分类:
普通索引:
唯一性索引:字段的值是唯一的
全文索引:查询数据量较大的字符串时
单列索引:只对应一个字段  可以是其他索引
多列索引:对应多个字段
空间索引
create view 视图名 as select  id,name from user
create sequence seq;产生一个序列       oracle
seq.nextval;
三范式:设计数据库所遵循的规则
1.不存在冗余数据  数据不能重复    要求:要有主键,列不可分
2.多对多 一张表有多个字段作为组件   不能存在部分依赖
Oracle
pl_sql

name varchar constraint haha,限制了变量
name varchar(11) unique  独一无二,不能重复的

constraint 【名字】  not null  约束 
NOT NULL          非空约束C     指定的列不允许为空值
UNIQUE             唯一约束U     指定的列中没有重复值,或该表中每一个值或者每一组值都将是唯一的
PRIMARY KEY       主键约束P     唯一的标识出表的每一行,且不允许空值值,一个表只能有一个主键约束
FOREIGN KEY       外键约束R     一个表中的列引用了其它表中的列,使得存在依赖关系,可以指向引用自身的列
CHECK              条件约束C     指定该列是否满足某个条件
where纯数据过滤
join表连接处理

子查询:
in 
select name from student where sno in(select sno from user where con='1');
exists  返回一个bool值
select *from user where exists(select name from user where id=1);
select *from user u where u.score>=any(select score from scholarship );符合一个条件  
select *from user u where u.score>=all(select score from scholarship ); 符合所有条件
合并查询union
select……union select……
交操作
select。。。intersect select...
差操作except

通配符与like关键字一起使用,范围有限
正则表达式 regular expression
select *from user where name regexp '^a';

64.二.操作命令   

73.create table 表名(规范为tbl_表名)   
74.(   
75.id int auto_increment primary key,( auto_increment为自动增长)   
76.name varchar(20) primary key   
77.)
ENGINE=InnoDB DEFAULT CHARSET=gbk//支持事务和设置表的编码   
78.6.2添加主外键:   
79.alter table 外表名  add constraint FK_名称 foreign key(外列) references 主表名(主列)   
80.如现有两表 主表tbl_order 子表tbl_orderdetail 现子表tbl_orderdetail的oid列引用了主表tbl_order的oid列   
81.则命令如下:   
82.alter table tbl_orderdetail  add constraint FK_oid foreign key(oid) references tbl_order(oid)   
83.7.导出表,备份到一个文件中,如.txt,.doc   
  
102.4.修改用户密码:mysqladmin -u 用户名 -p password 新密码   
103.5.处理中文乱码:   
104.(1).在D:\MySQL \MySQL Server 5.0\data的操作数据为文件中查看是否为以下:   
105.default-character-set=gbk  
106.default-collation=gbk_chinese_ci  
108.(2).查看安装文件默认编码:D:\MySQL\MySQL Server 5.0>my>default-character-set=gbk  

113.启动:net start mySql;  
119.建立数据库:source fileName.txt;   
120.匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;     
124.增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";      
126.查询时间:select now();   
127.查询当前用户:select user();   
128.查询数据库版本:select version();   
129.查询当前使用的数据库:select database();   
131.1、删除student_course数据库中的students数据表:   
132.rm -f student_course/students.*    
134.2、备份数据库:(将数据库test备份)   
135.mysqldump -u root -p test>c:\test.txt   
136.备份表格:(备份test数据库下的mytable表格)   
137.mysqldump -u root -p test mytable>c:\test.txt   
备份与恢复数据库
28.1.
执行外部的sql脚本   
29.当前数据库上执行:mysql < input.sql  
30.指定数据库上执行:mysql [表名] < input.sql  
31.2.数据传入命令 load data local infile "[文件名]" into table [表名];   
32.备份数据库:
(dos下)   
33.mysqldump -u root -p -h localhost databasename >d:\aa.sql
还原    .mysqldump -u root -p -h localhost databasename <d:\aa.sql
37.提示:常用MySQL命令以";"结束,有少量特殊命令不能加";"结束,如备份数据库   
数据量大的时候,可以使用gzip压缩一下
mysqldump -u 用户名 -p 密码 数据库名 | gzip > XX.sql.gz

备份MySQL数据库某个(些)表
mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql  
同时备份多个MySQL数据库
mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql

导入sql文件
source D:\a.sql
139.mysql -u root -p test   
141.3、创建临时表:(建立临时表zengchao)   
142.create temporary table zengchao(name varchar(10));    
144.4、创建表是先判断表是否存在   
145.create table if not exists students(……);     
147.5、从已经有的表中复制表的结构   
148.create table table2 select * from table1 where 1<>1;     
150.6、复制表   
151.create table table2 select * from table1;    
154.alter table table1 rename as table2;   
156.8、修改列的类型   
157.alter table table1 modify id int unsigned;//修改列id的类型为int unsigned   
158.alter table table1 change id sid int unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned     
160.9、创建索引   
161.alter table table1 add index ind_id (id);   
162.create index ind_id on table1 (id);   
163.create unique index ind_id on table1 (id);//建立唯一性索引     
165.10、删除索引   
166.drop index idx_id on table1;   
167.alter table table1 drop index ind_id;     
169.11、联合字符或者多个列(将列id与":"和列name和"="连接)   
170.select concat(id,':',name,'=') from students;     
172.12、limit(选出10到20条)<第一个记录集的编号是0>  
173.select * from students order by id limit 9,10;   
 
179.14、MySQL会使用索引的操作符号   
180.<,<=,>=,>,=,between,in,不带%或者_开头的like   

182.15、使用索引的缺点   
183.1)减慢增删改数据的速度;   
184.2)占用磁盘空间;   
185.3)增加查询优化器的负担;   
186.当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加工作量,导致无法选择最优的查询方案;    
188.16、分析索引效率   
189.方法:在一般的SQL语句前加上explain;   
190.分析结果的含义:   
191.1)table:表名;   
192.2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;   
193.3)possible_keys:查询可以利用的索引名;   
194.4)key:实际使用的索引;   
195.5)key_len:索引中被使用部分的长度(字节);   
196.6)ref:显示列名字或者"const"(不明白什么意思);   
197.7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;   
198.8)extra:MySQL的建议;     
200.17、使用较短的定长列   
201.1)尽可能使用较短的数据类型;   
202.2)尽可能使用定长数据类型;   
203.a)用char代替varchar,固定长度的数据处理比变长的快些;   
204.b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;   
205.c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;   
206.d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;    
208.18、使用not null和enum   
209.尽量将列定义为not null,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;   
210.如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;     
212.19、使用optimize table   
213.对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;
  
215.20、使用procedure analyse()   
216.可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedure analyse()就可以了;例如:   
217.select * from students procedure analyse();   
218.select * from students procedure analyse(16,256);   
219.第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;     
221.21、使用查询缓存   
222.1)查询缓存的工作方式:   
223.第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。   
224.2)配置缓存参数:   
225.变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与 select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询; query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。   
   
240.一、连接MYSQL。     
242.格式: mysql -h主机地址 -u用户名 -p用户密码     
244.1、例1:连接到本机上的MYSQL。    
246.首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql>    
248.2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为 root,密码为abcd123。则键入以下命令:     
250.mysql -h110.110.110.110 -uroot -pabcd123     
252.(注:u与root可以不用加空格,其它也一样)     
254.3、退出MYSQL命令: exit (回车)     
256.二、修改密码。     
258.格式:mysqladmin -u用户名 -p旧密码 password 新密码    
260.1、例1:给root加个密码ab12。首先在DOS下进入目录mysqlbin,然后键入以下命令     
262.mysqladmin -uroot -password ab12     
264.注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。     
266.2、例2:再将root的密码改为djg345。    
268.mysqladmin -uroot -pab12 password djg345     
270.三、增加新用户。(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)   .  
272.格式:grant select on 数据库.* to 用户名@登录主机 identified by \"密码\"     
274.例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL,然后键入以下命令:     
276.grant select,insert,update,delete on *.* to test1@\"%\" Identified by \"abc\";     
278.但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见例2。     
280.例 2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从 internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。  
  
282.grant select,insert,update,delete on mydb.* to test2@localhost identified by \"abc\";    
284.如果你不想test2有密码,可以再打一个命令将密码消掉。     
286.grant select,insert,update,delete on mydb.* to test2@localhost identified by \"\";   
294.2、你可以使用光标上下键调出以前的命令。但以前我用过的一个MYSQL旧版本不支持。我现在用的是mysql- 3.23.27-beta-win。     
302.刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。   

340.drop database if exists school; //如果存在SCHOOL则删除         
346.create table teacher //建立表TEACHER   
350.id int(3) auto_increment not null primary key,     
352.name char(10) not null,     
354.address varchar(50) default ’深圳’,   
356.year date   
   
四、将文本数据转到数据库中    
376.1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用\\n来代替.   
384.2、数据传入命令 load data local infile \"文件名\" into table 表名;     
386.注意:你最好将文件复制到\\mysql\\bin目录下,并且要先用use命令打表所在的库。   
388.五、备份数据库:(命令在DOS的\\mysql\\bin目录下执行)   
389.mysqldump --opt school>school.bbb    
391.注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。   

404.注意,如果是连接到另外的机器上,则需要加入一个参数-h机器IP   
405.第三招、增加新用户   
406.格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"   
407.如,增加一个用户user1密码为password1,让其可以在本机上登录, 并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令:   
408.grant select,insert,update,delete on *.* to user1@localhost Identified by "password1";   
409.如果希望该用户能够在任何机器上登陆mysql,则将localhost改为"%"。   
410.如果你不想user1有密码,可以再打一个命令将密码去掉。   
411.grant select,insert,update,delete on mydb.* to user1@localhost identified by "";   
   
  
6、 清空表中记录:   
430.delete from 表名;   
  
 将文本数据导入数据库:   
443.文本数据的字段数据之间用tab键隔开。   
445.load data local infile "D:/b.txt" into table 表名;   
  
459.sql="select * from 数据表 where 字段名 between 值1 and 值2"  
  
481.AVG(字段名) 得出一个表格栏平均值   
482.COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计   
483.MAX(字段名) 取得一个表格栏最大的值   
484.MIN(字段名) 取得一个表格栏最小的值   
485.SUM(字段名) 把数据栏的值相加     
505.Select remark as r id,uid from test.text where 指id uid 2栏显示 as 就是给栏目命名    
509.select * from test.text where id in(1,3,5) 指找出ID为1 3 5的 not in()则相反   
511.select * from test.text where remark like "%学%" 指remark里带学的都出来   
512.select * from test.text where id between 1 and 10 and uid like "%王%"表示ID 1-10 并且 UID带王字的出来   
513.select * from test.text where id not between 1 and 4   指ID不在1-4里面的 出来   
and or可以连接很多条件   
515.select * from test.text group by remark 显示列出remark有多少类别 如图↓ 有5类 group by 就是分组命令     
517.select * from test.text order by regdate asc 把regdate 按从小到大排列    
518.ASC不打就是默认从小到大 DESC表示从大到小 如 order desc   
519.select * from test.text order by regdate asc,id desc 这样就查询出日期从小到大 然后在满足日期的排列后 ID从大到小排列   
520.select * from test.text limit 0,5 表示取5条记录 如果是3,6 那就是第4-第9条记录被取出 
521.如过只写一个6那就等于0,6   
522.select * from test.text group by remark order by regdate limit 6   先分组 再排序 LIMIT放最后 这是语法不能颠倒。   
        
588.NUMERIC(M,D) [ZEROFILL]    
589.这是DECIMAL的一个同义词。 DATE    
590.一个日期。支持的范围是'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式来显示DATE值,但是允许你使用字符串或数字把值赋给DATE列。    
591.DATETIME    
592.一个日期和时间组合。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。MySQL以'YYYY-MM-DD HH:MM:SS'格式来显示DATETIME值,但是允许你使用字符串或数字把值赋给DATETIME的列。    
593.TIMESTAMP[(M)]    
594.一个时间戳记。范围是'1970-01-01 00:00:00'到2037年的某时。MySQL以YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD或YYMMDD格式来显示TIMESTAMP值,取决于是否M是14(或省略)、12、8或6,但是允许你使用字符串或数字把值赋给TIMESTAMP列。一个TIMESTAMP列对于记录一个INSERT或UPDATE操作的日期和时间是有用的,因为如果你不自己给它赋值,它自动地被设置为最近操作的日期和时间。你以可以通过赋给它一个NULL值设置它为当前的日期和时间。
   
595.TIME    
596.一个时间。范围是'-838:59:59'到'838:59:59'。MySQL以'HH:MM:SS'格式来显示TIME值,但是允许你使用字符串或数字把值赋给TIME列。    
597.YEAR[(2|4)]    
598.一个2或4位数字格式的年(缺省是4位)。允许的值是1901到2155,和0000(4位年格式),如果你使用2位,1970-2069( 70-69)。MySQL以YYYY格式来显示YEAR值,但是允许你把使用字符串或数字值赋给YEAR列。(YEAR类型在MySQL3.22中是新类型。)    
599.CHAR(M)     
601.[NATIONAL] VARCHAR(M) [BINARY]    
VARCHAR是CHARACTER VARYING一个缩写。    

615.ENUM('value1','value2',...)     
SET('value1','value2',...)    
一个SET最多能有64个成员。  

数据类型
整数类形  字节
tinyint   1 
samllint  2
mediumint 3
int       4
integer   4
bigint    8
日期与时间类型
date    4   日期  
time      3   时分秒
year      1   年份
datetime  8    date+time
timestamp 4   格式类似于datetime,但范围较小
字符串变量
var varchar都指定了最大长度    varchar是使用多少占用多少
varchar类型占用的空间为字符串加1
text是只能保存字符串数据的字符串类型
类型  允许的长度  存储空间
tinytext      0~255字节  值的长度+2个字节
text        0~65535字节  值的长度+2个字节
mediumtext    0~167772150字节  值的长度+3个字节
longtext      0~4294967295字节  值的长度+4个字节

属性名 enum(1,2,3,,4……);  只可以取一个
属性名 set(1,2,3,4……);  可以取多个   最多64个

浮点与定点类型
float   4
double  8
decimal(M,D)  M+2  定点的存储空间是由其精度决定的   ['desim?l]   M是总长度 D是小数点后位数
二进制类型
binary  ['ba?n?r?]二进制

binary(m)  M  --类似于字符串
varbinary(M)   0~M  

BLOB Binary Large Object  二进制大型存储对象   主要用来存储图像,pdf文件
tinyblob  可变长二进制最多255个字节
blob  可变长二进制最多2^16-1个字节
mediumblob  可变长二进制最多2^24-1个字节
longblob  可变长二进制最多2^32-1个字节
在mysql中,定点数的精度比浮点数要高,而且浮点数会出现误差,对数据的要求比较高,要选择定点数
mysql定义的bool和boolean最后转换成的是tinyint(1);
一般数据库不直接存储图像之类的,一般存储路径

show engines
存储引擎:
innodb:支持事务处理,支持外键,同时支持奔溃修复能力和并发控制。       事务要求高的
MyISAM:空间和内存使用比较低,适用于表主要是用于插入新纪录和独处读出记录  查询要求比较高
memory:所有数据都在内存中,数据的处理快,但安全性不高。适用于要很快的读写速度,不能建立太大的表  需要一个用于查询的临时表

create tavke example(stu_id int,course_id int,primary key(stu_id,course_id));
show create table example;
alter table name rename name2;
 alter table people change peopleid peopleid smallint auto_increment 
alter table example modify  name varchar(20);修改字段的数据类型
alter table example modify  birthdat datetime after name;改变字段顺序
alter table example engine=存储引擎名 
alter table 表名 drop foreign key 外键名

视图是一张虚拟的表,是从数据库中一个或多个表中导出来的表。一旦表中的数据发生改变,视图的数据也会发生改变
在原有的表上取出对用户有用的属性

create algorithm=merge|undefined|temptable view 视图名(属性清单)as select 属性清单 from 表名  [with cascaded|local check option]
create or replace view……当视图存在时修改视图
drop  view 视图名 if ……
建立和删除视图只影响视图本身,在视图上的修改表也会发生改变
一个视图可以对应一个表,也可以对应多个表    连续使用多次create
视图不能更新的原因:函数,关键字,常量视图
algorithm   算法

触发器
create trigger 触发器名 before|after 触发事件 on 表名 for each row
begin
 执行语句
end
&&

gbk是中国汉字的字符集,对汉字的支持分厂好,如果要存储汉字和英文,可以使用gbk,
utf8是一种国际字符集,支持很多语言

用户权限管理
添加普通用户
create user "test"@"localhost" identified by "test1";
mysql> insert into mysql.user(host ,user,password,ssl_cipher,x509_issuer,x509_subject)
values("localhost","test2","test2","","","");
删除普通用户
drop user "test"@"localhost";
delete from mysql.user where host="localhost" and user="test";
flush privileges;
修改root密码
 mysqladmin -u root -p password "mysqladmin"
 set password=password("新密码");
 修改用户
 update mysql.user set password=password("新密码") where user="root" and host="localhost";
 set password for 'test'@'loacalhost'=password("新密码");

 root用户密码丢失的解决方法

 日记简介
 二进制日志:以二进制文件形式记录了数据库中的操作,但不记录查询语句
 错误日志: 记录mysql服务器的启动,关闭和运行错误等信息
 通用查询日志:记录用户登陆和巨鹿查询的信息
 慢查询日志:记录执行时间超过指定时间的操作

默认情况下只启动了错误日志

数据库迁移
相同版本的:复制数据库目录 ,只有数据库表都是M有ISAM类型的才能使用
mysqldump -h root --password=password1 --all-databases| mysql -h host2 -u root --password=password2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: