1.关于安装MySQL
- 如果我们是redhat系列,可以直接利用光盘,构建本地YUM源,进行安装。
- 注意,MySQL是Client/Server架构的,也就是说我们可以选择安装MySQL服务器和客户端。
- 直接安装mysql-server即可,这样就可以将客户端也一并安装完成。
- mysql为客户端进程,mysqld为服务器端进程。
- 默认情况下,MYSQL在TCP/3306进行监听
- 可以利用一下命令启动和连接MYSQL数据库
[[email protected] ~]# service mysqld start Starting MySQL: [ OK ] [[email protected] ~]# ps aux | grep -i mysql root 3262 0.2 0.2 4500 1192 pts/0 S 22:45 0:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/etc/my.cnf --pid-file=/var/run/mysqld/mysqld.pid --log-error=/var/log/mysqld.log mysql 3298 2.0 4.0 137224 17884 pts/0 Sl 22:45 0:00 /usr/libexec/mysqld --defaults-file=/etc/my.cnf --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-locking --socket=/var/lib/mysql/mysql.sock root 3321 0.0 0.1 3892 660 pts/0 R+ 22:45 0:00 grep -i mysql [[email protected] ~]# mysql -uroot -h192.168.204.88 -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 to server version: 5.0.22 Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the buffer. mysql> |
说明: MYSQL安装后有一个初始化动作。注意,MYSQL创建完成后,有一个独特的数据库,就叫MYSQL。【元数据信息】当前数据库系统上有多少个数据库,表,字段信息等等。所以刚开始初始化的过程,就是建立这个MYSQL库的过程。 从MYSQL的连接命令mysql -uUSERNAME -hHOST -pPASSWORD,可以看出,MYSQL的用户是由USERNAME和HOST共同组成。HOST可以是IP,HOSTNAME,也可以是通配符,如‘%‘。 |
2.关于分号
很多时候,我们在MYSQL的客户端执行命令的时候,必须输入;进行结束;但是有时候却可以不用输入,这是为什么呢? MYSQL命令分为客户端命令和服务器端命令。 所谓服务器端命令,是必须要发送到服务器端执行的,那么服务器需要知道执行语句是否结束。默认情况下,语句结束符是分号。【什么DDL,DML,DCL】 而客户端命令,比如quit,不用发送到服务器,只需要MYSQL客户端执行就可以了。 ? (\?) Synonym for `help‘. clear (\c) Clear command. connect (\r) Reconnect to the server. Optional arguments are db and host. delimiter (\d) Set statement delimiter. NOTE: Takes the rest of the line as new delimiter. edit (\e) Edit command with $EDITOR. ego (\G) Send command to mysql server, display result vertically. exit (\q) Exit mysql. Same as quit. go (\g) Send command to mysql server. help (\h) Display this help. nopager (\n) Disable pager, print to stdout. notee (\t) Don‘t write into outfile. pager (\P) Set PAGER [to_pager]. Print the query results via PAGER. print (\p) Print current command. prompt (\R) Change your mysql prompt. quit (\q) Quit mysql. rehash (\#) Rebuild completion hash. source (\.) Execute an SQL script file. Takes a file name as an argument. status (\s) Get status information from the server. system (\!) Execute a system shell command. tee (\T) Set outfile [to_outfile]. Append everything into given outfile. use (\u) Use another database. Takes database name as argument. charset (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets. warnings (\W) Show warnings after every statement. nowarning (\w) Don‘t show warnings after every statement. |
3. 数据库就是目录
[[email protected] mysql]# pwd /var/lib/mysql [[email protected] mysql]# ls -l total 20768 -rw-rw---- 1 mysql mysql 10485760 Aug 30 23:10 ibdata1 -rw-rw---- 1 mysql mysql 5242880 Aug 31 20:56 ib_logfile0 -rw-rw---- 1 mysql mysql 5242880 Mar 9 2012 ib_logfile1 -rw-rw---- 1 mysql mysql 20225 Aug 9 13:05 localhost.err -rw-rw---- 1 mysql mysql 161462 Aug 29 16:23 localhost.localdomain.err drwx------ 2 mysql mysql 4096 Aug 31 21:38 mydb1 drwxr-xr-x 2 mysql mysql 4096 Aug 29 17:05 mydb2 drwx--x--x 2 mysql mysql 4096 Mar 9 2012 mysql srwxrwxrwx 1 mysql mysql 0 Aug 31 20:56 mysql.sock -rw-r--r-- 1 mysql mysql 115 Mar 9 2012 RPM_UPGRADE_HISTORY drwxr-xr-x 2 mysql mysql 4096 Mar 9 2012 test [[email protected] mysql]# 默认情况下MYSQL安装至/var/lib/mysql. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mydb1 | | mydb2 | | mysql | | test | +--------------------+ 5 rows in set (0.00 sec) 注意到有mydb1,mydb2,mysql等这些数据库,同时观察/var/lib/mysql下有mydb1,mydb2,mysql这些目录。但是没有发现infomation_schema目录,因为information_schema这个数据库是MYSQL运行过程中产生的一些信息,存在于内存当中。 由于LINUX平台,区分大小写,因此LINUX平台下的MYSQL是可以创建mydb1,MYdb1这种名称。当然,WINDOWS平台又是另一回事了。 |
4. MySQL的数据类型初步
字符型: char(n) <=256个字符 无论如何占据n个空间 varchar(n) 占据空间是不定的 <=65535个字符 以上的字符型默认都是不区分大小写的。 binary(n) 以二进制格式存储的字符型,区分大小写 vbinary(n) 当然,上面的,内容有限,下面的是文本大对象: text(n) 不区分大小写 text也有几个变种 blob(n) 二进制大对象,区分大小写 数值型: 精确数值型(整型) int 当然这个int也有多个变种,如smallint bigint mediumint ... decimal十进制 近似数值型(浮点型) float double 日期型: time 时间 date 日期 datetime 日期时间 stamp 时间戳 |
5.MySQL命令初步
对于MYSQL而言,命令不分区大小写。 DDL: create drop alter DML: insert update delete DCL: grant revoke 创建,删除数据库命令: create database xxx; create database if not exists xxx; drop database xxx;【MYSQL没有回收站,删除了,就删除了。】 drop database if exists xxx; 关于表: create table xxx( ); 实际上,我们创建表是,应该这样指定的: create table mydatabase.xxx( ); 为了方便,我们可以手动指定默认使用的数据库: use mydatabase; 查看默认数据库: mysql> select database(); +------------+ | database() | +------------+ | mydb1 | +------------+ 1 row in set (0.00 sec) 查看表: mysql> show tables; +-----------------+ | Tables_in_mydb1 | +-----------------+ | users | +-----------------+ 1 row in set (0.00 sec) 其实际上,是show tables from xxxdatabase; 当然,由于我们使用了默认数据库,因此可以省略。 查看表结构: desc xxxtable; 表名也是区分大小写的。【可能是单个文件存放的】 删除表: drop table yyy; 修改表结构: alter table xxx modify 除名称外其他都可以改动 change 仅仅只能改名称 add drop mysql> alter table users add sex char(1) not null; Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> desc users; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | varchar(10) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | sex | char(1) | NO | | NULL | | +-------+-------------+------+-----+---------+-------+ 3 rows in set (0.00 sec) mysql> alter table users change sex Sex char(1); 关于INSERT: 注意了,MYSQL支持批量插入。 insert into xxx(...) values (...),(...),(...); 关于UPDATE: update xxx set col = yyy where ... 关于delete: delete from tablename where ...; 关于创建用户: create user [email protected]‘yyy‘ identified by ‘password‘ yyy: IP/HOSTNAME/通配符(* _) 一定要注意的是: [email protected] [email protected]是2个不同的用户。 mysql> create user ‘zhangfengzhe‘@‘192.168.204.88‘ identified by ‘zhangfengzhe‘; Query OK, 0 rows affected (0.01 sec) mysql> [[email protected] ~]# mysql -uzhangfengzhe -h192.168.204.88 -pzhangfengzhe Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 to server version: 5.0.22 Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the buffer. mysql> 关于授权grant mysql> grant select on mydb1.users to [email protected]; grant x1,x2,x3 on mydatabase.mytable to [email protected]; 【可以在授权的同时,在给用户USER+HOST指定密码,当然是没有密码的前提下】 回收权限 mysql> revoke select on mydb1.users from [email protected] ; 查看用户的权限列表: mysql> show grants for ‘zhangfengzhe‘@‘192.168.204.88‘; +-------------------------------------------------------------------------------------------------+ | Grants for [email protected] | +-------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO ‘zhangfengzhe‘@‘192.168.204.88‘ IDENTIFIED BY PASSWORD ‘077f6efc49268c9e‘ | +-------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> grant select on mydb1.users to [email protected]; Query OK, 0 rows affected (0.00 sec) mysql> show grants for ‘zhangfengzhe‘@‘192.168.204.88‘; +-------------------------------------------------------------------------------------------------+ | Grants for [email protected] | +-------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO ‘zhangfengzhe‘@‘192.168.204.88‘ IDENTIFIED BY PASSWORD ‘077f6efc49268c9e‘ | | GRANT SELECT ON `mydb1`.`users` TO ‘zhangfengzhe‘@‘192.168.204.88‘ | +-------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec) 所有权限: ALL PRIVILEGES 给一个用户的一个库中的所有表的权限: grant ALL PRIVILEGES on mydb1.* to ‘zhangfengzhe‘@‘%‘; |