mysql建表常用选项
mysql> CREATE TABLE test.student(
-> 学号 char(9) NOT NULL,
-> yg_id int(4) AUTO_INCREMENT, 为字段设自增属性,自动从1
开始逐个增加
-> name varchar(12) not null,
-> FOREIGN KEY(gz_id) REFERENCES yg(yg_id),gz_id字段设
为外键,将yg表的yg_id字段作为参考键:
-> birth date NOT NULL, 用函数date表示出生日期
-> 性别 enum('男','女') NOT NULL,
-> 工资 float(7,2) NOT NULL DEFAULT 0, //工资最大长度7
位,小数位数2位,不能为空,默认为0
-> 手机号 char(11) DEFAULT '',
-> UNIQUE(yg_id), INDEX(name) //创建表的时候指定
INDEX索引字段为name,UNIQUE唯一索引字段为id(一个表中可有多个
UNIQUE和INDEX)
-> PRIMARY KEY(学号) //设定主键
-> ON UPDATE CASCADE ON DELETE CASCADE //级联更新,级联
删除
-> ) DEFAULT CHARSET=utf8; //手工指定字符集,采用
utf8
修改MySQL服务的默认字符集支持中文
[root@dbsvr1 ~]# vim /etc/my.cnf
[mysqld]
.. ..
character_set_server=utf8 //字符支持中文
default_storage_engine=MEMORY //改用MEMORY引擎
service mysql restart //重启服务
时间函数:
mysql> SELECT now(); //使用now()查看当前的日期和时间
mysql> SELECT sysdate(); //使用sysdate()查看系统日期和
时间
mysql> SELECT curdate(); //使用curdate()获得当前的日期
,不含时间
mysql> SELECT curtime(); //使用curtime()获得当前的时间
,不含日期
mysql> SELECT year(now()),month(now()),day(now()); //分别获
取当前日期时间中的年份、月份、日
mysql> SELECT month(sysdate()),day(sysdate()); //获取系统日
期时间中的月,日
mysql> SELECT time(sysdate()); //获取系统日期时间中的时
刻
删除修改添加 字段
mysql>ALTER TABLE tea6 ADD address varchar(48); //添加
address字段:
mysql>ALTER TABLE tea6 ADD name char(12) AFTER age; //在tea6
表的age列之后添加一个name字段
mysql> ALTER TABLE tea6 CHANGE gender //将tea6表的
gender字段改名为sex,并添加非空约束修改操作
mysql> ALTER TABLE tea6 DROP sex; //删除tea6表中名为sex
的字段:
mysql索引:index:普通索引 unique:唯一索引 fulltext:全文索引
primary key:主键 poreign key:外键 REFERENCES:参考键
mysql> DROP INDEX name ON tea4; //删除tea4表的
name字段的索引
mysql> CREATE INDEX nianling ON tea4(age); //针对age字段创
建索引名称为nianling
mysql> SHOW INDEX FROM tea4\G //查看指定表的索引信息
mysql> DROP INDEX name ON tea5; //清除INDEX索引
mysql> CREATE UNIQUE INDEX name ON tea5(name); //建立
UNIQUE索引
mysql> ALTER TABLE biao01 DROP PRIMARY KEY; //清除biao01表
的主键索引
mysql存储引擎
mysql>SHOW ENGINES\G或mysql>SHOW VARIABLES LIKE
'default_storage_engine';
//查看mysql默认存储引擎
mysql> SET default_storage_engine=MyISAM; //改用MyISAM引擎
,退出mysql失效
mysql导入/etc/passwd文件
mysql> LOAD DATA INFILE '/etc/passwd'
-> INTO TABLE userlist
-> FIELDS TERMINATED BY ':';
mysql查看
mysql> SELECT COUNT(*) FROM userlist; //统计userlist表内
的记录个数:
mysql> SELECT username,uid,gid,homedir,shell
-> FROM userlist LIMIT 10; //查看userlist表的前10条记录
,列出用户名、UID、GID、宿主目录、登录Shell
mysql> SELECT * FROM userdb.userlist WHERE uid<100
-> INTO OUTFILE '/dbbak/ulist.txt'
-> FIELDS TERMINATED BY ':'; //导出userlsit表中UID小于
100的前10条记录,文件不用存在,文件必须授权给mysql权限
mysql> INSERT INTO stu_info VALUES //给stu_info 表插入内
容示例
-> ('Jim','girl',24),
-> ('Tom','boy',21),
-> ('Mike','boy',21)
-> ;
mysql> SELECT count(*) FROM stu_info; //查询stu_info表一
共有多少条记录
mysql> SELECT avg(age),max(age),min(age) FROM stu_info; //计
算表中各学员的平均年龄、最大年龄、最小年龄
mysql> SELECT count(gender) FROM stu_info WHERE
gender='boy'; //计算stu_info表中男学员的个数
mysql> SELECT * FROM stu_info WHERE age=21; //列出stu_info表
中年龄为21岁的学员记录
mysql> SELECT * FROM stu_info WHERE age>21; //列出stu_info表
中年龄超过21岁的学员记录
mysql> SELECT * FROM stu_info WHERE age>=21; //列出stu_info
表中年龄大于或等于21岁的学员记录
mysql> SELECT * FROM stu_info WHERE age BETWEEN 20 and 24;
列出stu_info表中年龄在20岁和24岁之间的学员记录
mysql> SELECT * FROM stu_info WHERE age < 23 AND
gender='girl'; //列出stu_info表中年龄小于23岁的女学员记录
mysql> SELECT * FROM stu_info WHERE age < 23 OR
gender='girl'; //列出stu_info表中年龄小于23岁的学员,或者女
学员的记录
mysql> SELECT * FROM stu_info WHERE name IN
('Jim','Tom','Mickey','Minnie'); //如果某个记录的姓名属于指
定范围内的一个,则将其列出
mysql> SELECT name,age+15 FROM stu_info; //输出stu_info表各
学员的姓名、15年后的年龄
mysql> SELECT 1234*5678; //计算1234与5678的乘积,还可以计算
加减乘除
mysql> SELECT * FROM stu_info WHERE name LIKE 'J%'; /使用模
糊查询,LIKE引领,以下划线 _ 匹配单个字符,% 可匹配任意多个字
符。列出stu_info表中姓名以“J”开头的学员记录
mysql> SELECT * FROM stu_info WHERE name Like 'J%y'; 使用正
则表达式,REGEXP引领,列出stu_info表中姓名以“J”开头且以“y
”结尾的学员记录
mysql> SELECT * FROM stu_info WHERE name REGEXP '^J|y$'; 列
出stu_info表中姓名以“J”开头或者以“y”结尾的学员记录 效果
等同于:mysql> SELECT * FROM stu_info WHERE name Like 'J%'
OR name Like '%y';
mysql> SELECT * FROM stu_info GROUP BY age; 列出stu_info表
的所有记录,按年龄排序:
mysql> SELECT * FROM stu_info GROUP BY age DESC; 列出
stu_info表的所有记录,按年龄降序:
mysql> SELECT * FROM stu_info LIMIT 3; 查询stu_info表的所有
记录,只列出前3条
mysql> SELECT * FROM stu_info GROUP BY age DESC LIMIT 3; 列
出stu_info表中年龄最大的3条学员记录
mysql> SELECT gender,count(gender) FROM stu_info GROUP BY
gender; 按性别分组,分别统计出男、女学员的人数
mysql> SELECT gender AS '性别',count(gender) AS '人数' FROM
stu_info GROUP BY gender; 列出查询字段时,可以通过AS关键字来
指定显示别名,比如上述操作可改为
mysql> INSERT INTO stu_info(name,age) VALUES('Jerry',27);
向stu_info表插入Jerry的年龄信息,性别为默认的“boy”
mysql> UPDATE stu_info SET age=10; 将stu_info表中所有记录
的age设置为10
mysql> UPDATE stu_info SET age=20 WHERE gender='boy'; 将
stu_info表中所有性别为“boy”的记录的age设置为20
mysql> DELETE FROM stu_info WHERE age < 18; 删除stu_info表
中年龄小于18的记录
忘记密码
mysqld_safe --user=mysql --skip-grant-tables //跳过授权
mysql> UPDATE mysql.user SET password=PASSWORD('1234567')
WHERE user='root' AND host='localhost'; 修改密码
mysql> FLUSH PRIVILEGES; //
刷新授权表
[root@dbsvr1 ~]# mysqladmin -u root -p password '1234567'
知道原密码,设置新密码
mysql> SET PASSWORD FOR root@localhost=PASSWORD('1234567');
知道原密码,设置新密码(登入mysql服务后)
mysql权限
mysql> GRANT all ON *.* TO root@'192.168.4.%' IDENTIFIED BY
'tarena'; 允许root从192.168.4.0/24访问,对所有库表有完全
权限,密码为tarena。
mysql> GRANT all ON *.* TO dba007@localhost -> IDENTIFIED BY
'1234567' -> WITH GRANT OPTION; 建立一个管理账号dba007,对所
有库完全控制,并赋予其授权的权限
mysql> SHOW GRANTS FOR dba007@localhost; 查看dba007的权限
mysql> REVOKE all ON *.* FROM root@localhost; 撤销root从本
机访问的权限
mysql> GRANT all ON webdb.* TO webuser@'%' IDENTIFIED BY
'888888'; 允许webuser从任意客户机登录,只对webdb库有完全权
限,密码为 888888
mysql> GRANT select ON webdb.* TO webuser@'%'; 只赋予查询
权限(授权前先撤销其他权限)
mysql数据库备份
[root@dbsvr1 ~]# mysqldump -u root -p --all-databases >
/root/alldb.sql 将所有的库备份为mysql-all.sql文件
[root@dbsvr1 ~]# mysqldump -u root -p userdb > userdb.sql
只备份指定的某一个库,将userdb库备份为userdb.sql文件
[root@dbsvr1 ~]# mysqldump -u root -p -B mysql test userdb >
mysql+test+userdb.sql 同时备份指定的多个库
[root@dbsvr1 ~]# mysql -u root -p userdb2 < /root/userdb.sql
导入备份文件,最好不要导入到老库,需提前建立新库
mysql使用 binlog 日志
[root@dbsvr1 ~]# vim /etc/my.cnf
[mysqld]
.. ..
log-bin=mysql-bin //启用二进制日志,并指定前缀
mysqlbinlog /var/lib/mysql/mysql-bin.000002 查看mysql-
bin.000002日志内容,确定恢复起始时间点
[root@dbsvr1 ~]# mysqlbinlog --start-datetime="2014-01-12
20:12:14" --stop-datetime="2014-01-12 20:12:50"
/var/lib/mysql/mysql-bin.000002 | mysql -u root -p //根据
上述日志分析,只要恢复从2014.01.12 20:12:14到2014.01.12
20:13:50之间的操作即可。可通过mysqlbinlog指定时间范围输出,
结合管道交给msyql命令执行导入重做