mysql应用笔记
一、连接
mysql -u[count] -p [password]:u和账户名之间可以没有空格,省略password回车后提示输入密码
-h [ip]:远程连接
exit:退出
二、密码修改
mysqladmin -u[count] -password [password]:没有添加
mysqladmin -u[count] -p[old] -password [new]:有,修改
mysql>set PASSWORD=PASSWORD(‘password’):登录mysql后修改
三、增加新用户
grant select,insert,update,delete,drop,alter on 数据库名.表名 to 用户名@登录主机
eg:grant select on database.* to ‘zjk’@’%’
eg:grant select,insert,update,delete on . to test1@”%” Identified by “abc”;abc为密码
show grants for 用户名
四、创建删除数据库
create database 库名:一般创建数据库紧接着就是分配权限然后创建密码
drop database 库名
drop database if exists drop_database;先判断数据是否存在
show databases;
use 数据库名
mysql> select database();查看选择使用的数据库
五、数据库函数
1.显示MYSQL的版本mysql> select version(); +-----------------------+ | version() | +-----------------------+ | 6.0.4-alpha-community | +-----------------------+ 1 row in set (0.02 sec) 2. 显示当前时间mysql> select now(); +---------------------+ | now() | +---------------------+ | 2009-09-15 22:35:32 | +---------------------+ 1 row in set (0.04 sec) 3. 显示年月日SELECT DAYOFMonTH(CURRENT_DATE); +--------------------------+ | DAYOFMonTH(CURRENT_DATE) | +--------------------------+ | 15 | +--------------------------+ 1 row in set (0.01 sec) SELECT MonTH(CURRENT_DATE); +---------------------+ | MonTH(CURRENT_DATE) | +---------------------+ | 9 | +---------------------+ 1 row in set (0.00 sec) SELECT YEAR(CURRENT_DATE); +--------------------+ | YEAR(CURRENT_DATE) | +--------------------+ | 2009 | +--------------------+ 1 row in set (0.00 sec) 4. 显示字符串mysql> SELECT "welecome to my blog!"; +----------------------+ | welecome to my blog! | +----------------------+ | welecome to my blog! | +----------------------+ 1 row in set (0.00 sec) 5. 当计算器用select ((4 * 4) / 10 ) + 25; +----------------------+ | ((4 * 4) / 10 ) + 25 | +----------------------+ | 26.60 | +----------------------+ 1 row in set (0.00 sec) 6. 串接字符串select ConCAT(f_name, " ", l_name) AS Name from employee_data where title = 'Marketing Executive'; +---------------+ | Name | +---------------+ | Monica Sehgal | | Hal Simlai | | Joseph Irvine | +---------------+ 3 rows in set (0.00 sec) 注意:这里用到ConCAT()函数,用来把字符串串接起来。另外,我们还用到以前学到的AS给结果列'ConCAT(f_name, " ", l_name)'起了个假名。7.分隔字符串select substring_index(str,'.',1) form xx; 若str=ww.google 则返回www,截取.前的字符串
五、数据表操作
5.1.创建:create table 表名(字段) values(字段值)命令:create table <表名> ( <字段名1> <类型1> ,..<字段名n> <类型n>); 例如,建立一个名为MyClass的表,(注意并不是创建下面这张数据表,这张表只是说明字段的修饰) 字段名 数字类型 数据宽度 是否为空 是否主键 自动增加 默认值 id int 4 否 primary key auto_increment name char 20 否 sex int 4 否 0 degree double 16 是 数据类型(data_type)规定了列可容纳何种数据类型。下面的表格包含了SQL中最常用的数据类型:数据类型 描述integer(size)int(size)smallint(size)tinyint(size)仅容纳整数。在括号内规定数字的最大位数。decimal(size,d)numeric(size,d)容纳带有小数的数字。"size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数。char(size) 容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。在括号中规定字符串的长度。varchar(size) 容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。在括号中规定字符串的最大长度。date(yyyymmdd) 容纳日期。eg1:创建四列CREATE TABLE Person (LastName varchar(30),FirstName varchar,Address varchar,Age int(3))LastName FirstName adress age 必须要制定数据宽度,mysql> create table MyClass(> id int(4) not null primary key auto_increment,> name char(20) not null,> sex int(4) not null default '0',> degree double(16,2));id name sex degree 创建表相当于是只创建了个表头,里面没有数据的,此时用select * from 表名;也查询不到内容的可以用show tables;查看都有哪些表5.2 删除数据表命令:drop table <表名>例如:删除表名为 MyClass 的表 mysql> drop table MyClass;DROP TABLE用于取消一个或多个表。您必须有每个表的DROP权限。所有的表数据和表定义会被取消,所以使用本语句要小心!注意:对于一个带分区的表,DROP TABLE会永久性地取消表定义,取消各分区,并取消储存在这些分区中的所有数据。DROP TABLE还会取消与被取消的表有关联的分区定义(.par)文件。对与不存在的表,使用IF EXISTS用于防止错误发生。当使用IF EXISTS时,对于每个不存在的表,会生成一个NOTE。RESTRICT和CASCADE可以使分区更容易。目前,RESTRICT和CASCADE不起作用。5.3 表插入数据命令:insert into <表名> [( <字段名1>[,..<字段名n > ])] values ( 值1 )[, ( 值n )]例如:往表 MyClass中插入二条记录, 这二条记录表示:编号(id)为1的名(name)为Tom的成绩(score)为96.45, 编号为2 的名为Joan 的成绩为82.99, 编号为3 的名为Wang 的成绩为96.5。 mysql> insert into MyClass values(1,'Tom',96.45),(2,'Joan',82.99), (2,'Wang', 96.59);省略了字段等于mysql> insert into MyClass (id,name,score)values(1,'Tom',96.45),(2,'Joan',82.99), (2,'Wang', 96.59);注意:insert into每次只能向表中插入一条记录,就是每次插入的是一行,其他未指定的字段为NULL, 等再插入指定的另一个字段时其实是新开辟一行,其他为NULL。 如果想改每个单元格中的数据要用update,下面讲解5.4 查询表中的数据1)、查询所有行命令: select <字段1,字段2,...> from < 表名 > where < 表达式 >例如:查看表 MyClass 中所有数据 mysql> select * from MyClass;2)、查询前几行数据例如:查看表 MyClass 中前2行数据mysql> select * from MyClass order by id limit 0,2;select一般配合where使用,以查询更精确更复杂的数据。5.5 删除表中数据 命令:delete from 表名 where 表达式例如:删除表 MyClass中编号为1 的记录 mysql> delete from MyClass where id=1;5.6 修改表中数据语法:update 表名 set 字段=新值,… where 条件 mysql> update MyClass set name='Mary' where id=1;例子1:单表的MySQL UPDATE语句: UPDATE [LOW_PRIORITY] [IGNORE] tbl_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition] [ORDER BY ...] [LIMIT row_count] mysql> update table1 set age=10 where address='wuxi';例子2:多表的UPDATE语句: UPDATE [LOW_PRIORITY] [IGNORE] table_references SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]UPDATE语法可以用新值更新原有表行中的各列。SET子句指示要修改哪些列和要给予哪些值。WHERE子句指定应更新哪些行。如果没有WHERE子句,则更新所有的行。如果指定了ORDER BY子句,则按照被指定的顺序对行进行更新。LIMIT子句用于给定一个限值,限制可以被更新的行的数目。5.7 增加字段命令:alter table 表名 add字段 类型 其他;例如:在表MyClass中添加了一个字段passtest,类型为int(4),默认值为0 mysql> alter table MyClass add passtest int(4) default '0'5.8 修改原字段名称及类型: mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;5.9 删除字段:MySQL ALTER TABLE table_name DROP field_name;5.10 修改表名命令:rename table 原表名 to 新表名;例如:在表MyClass名字更改为YouClass mysql> rename table MyClass to YouClass;当你执行 RENAME 时,你不能有任何锁定的表或活动的事务。你同样也必须有对原初表的 ALTER 和 DROP 权限,以及对新表的 CREATE 和 INSERT 权限。如果在多表更名中,MySQL 遭遇到任何错误,它将对所有被更名的表进行倒退更名,将每件事物退回到最初状态。RENAME TABLE 在 MySQL 3.23.23 中被加入。5.11 查询表信息show table status like 'table_name' :显示表的所有信息,引擎/版本/行数/大小……show create table 表名:显示创建表的信息。字段名/字段类型/key
六、索引
1.加索引 mysql> alter table 表名 add index 索引名 (字段名1[,字段名2 …]);例子: mysql> alter table employee add index emp_name (name);2.加主关键字的索引 mysql> alter table 表名 add primary key (字段名);例子: mysql> alter table employee add primary key(id);3.加唯一限制条件的索引 mysql> alter table 表名 add unique 索引名 (字段名);例子: mysql> alter table employee add unique emp_name2(cardnumber);4.删除某个索引 mysql> alter table 表名 drop index 索引名;例子: mysql>alter table employee drop index emp_name;
七、备份数据库
1.导出整个数据库导出文件默认是存在mysql\bin目录下 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 //可同时指定多个库名用空格隔开 mysqldump -u user_name -p123456 database_name > outfile_name.sql --databases:后面跟多个数据库用空格隔开 -all-databases:复制所有数据库2.导出一个表 mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名 mysqldump -u user_name -p database_name table_name > outfile_name.sql3.导出一个数据库结构 mysqldump -u user_name -p -d –add-drop-table database_name > outfile_name.sql -d 没有数据,意思是只导出库的结构 –add-drop-table 在每个create语句之前增加一个drop table,如果数据库存在无需手动删除,自动覆盖4.带语言参数导出 mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt database_name > outfile_name.sql例如,将aaa库备份到文件back_aaa中: [root@test1 root]# cd /home/data/mysql [root@test1 mysql]# mysqldump -u root -p --opt aaa > back_aaa
八、还原数据库source
source 文件名;需要登录上mysql后操作,要先用use 数据库名来选择数据库 若以前没有数据库要create database 库:来新建数据库mysql -uroot -p 库名 < 文件名 无需登录mysql,在库存在的前提下使用
九、特殊名词
1.explainsql前加上explain查看执行sql用到了哪些key等详细信息 2.distinct
只返回不相同的,可以用来查询某个字段非重复的值:select distinct id form xx;
如果想查询单独的id,还想看看另外的一个字段就需要特殊
select test,count(distinct id) as id from xx group by id test id; id是非重复的,test只是输出id行的test