首页 > 数据库技术 > 详细

mysql基本用法

时间:2016-03-15 00:39:05      阅读:267      评论:0      收藏:0      [点我收藏+]

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命令执行导入重做








mysql基本用法

原文:http://liangzai818.blog.51cto.com/10003446/1751097

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!