MySQL目录结构
配置my.ini
MySQL5.7的my.ini位于\ProgramData\MySQL\MySQL Server 5.7目录下(可能有的版本的my.ini就在安装目录下),该该目录下还有一个data目录存放我们的创建的数据库。
打开my.ini文件[client]
用于配置客户端,主要就是3306端口。[mysqld]
配置的是服务端。
特别要注意一点:编码方式是utf8而不是utf-8。
在Linux系统中该配置文件在/etc/mysql/my.cnf。
启动、关闭重启MySQL
service mysql start|stop|restart
登录与退出MySQL
root@ubuntu:/etc/mysql# mysql -v # 查看mysql版本
mysql Ver 14.14 Distrib 5.5.35, for debian-linux-gnu (i686) using readline 6.2
root@ubuntu:/etc/mysql# mysql -uroot -p123456 -P3306 -h192.168.132.128 # -u用户名 -p密码(为了安全可以不写,会提示输入) -P端口 -h主机名
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 330
Server version: 5.5.35-0ubuntu0.12.04.2 (Ubuntu)
mysql> \q|exit|quit # 退出mysql
修改mysql提示符
- 连接mysql时通过
--prompt
参数指定
- 连接上客户端的时候通过
prompt
命令指定
MySQL提示符如下表:
参数 | 描述 |
---|---|
\D | 完整日期 |
\d | 当前数据库 |
\h | 服务器名 |
\u | 当前用户 |
以上的提示符还能连用,例如:
mysql> prompt \u@\h \d> # 用户名@主机名 数据库名
PROMPT set to '\u@\h \d>'
root@localhost demo>
MySQL常用命令
SET NAMES gbk; -- 客户端以GBK的编码形式呈现数据
mysql> SELECT VERSION(); # 显示mysql版本,相当于登录数据库之前输入mysql -V
+-------------------------+
| VERSION() |
+-------------------------+
| 5.5.35-0ubuntu0.12.04.2 |
+-------------------------+
1 row in set (0.00 sec)
mysql> SELECT USER(); # 显示当前用户
+----------------+
| USER() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
mysql> SELECT NOW(); # 显示系统时间
+---------------------+
| NOW() |
+---------------------+
| 2015-04-05 21:02:31 |
+---------------------+
1 row in set (0.00 sec)
mysql> # 在Linux的mysql中也可以使用Ctrl+L清屏
MySQL语句规范
- 关键字和函数名称全部大写;
- 数据库名、表名、字段名称全部小写;
- SQL语句必须以分号结束。
操作数据库
创建数据库
-- 说明:花括号表示必选项,竖线表示多选一,方括号表示可选
CREATE {
DATABASE|SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] character_name
mysql>
mysql> CREATE DATABASE t1;
Query OK, 1 row affected (0.00 sec)
mysql>
我们可以使用source
命令运行sql脚本。登录mysql数据库。
source 数据库脚本名
查看当前服务器中的数据库列表
SHOW {DATABASES | SCHEMAS} [LIKE 'pattern' | WHERE expr]
正确安装mysql后有4个数据库:
mysql> SHOW CREATE DATABASE t1; # 查看创建数据库使用的命令
+----------+-------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------+
| t1 | CREATE DATABASE `t1` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-------------------------------------------------------------+
1 row in set (0.00 sec)
mysql>
mysql> CREATE DATABASE IF NOT EXISTS t2 CHARACTER SET GBK; # 使用gbk编码方式创建数据库
Query OK, 1 row affected (0.00 sec)
mysql> SHOW CREATE DATABASE t2;
+----------+------------------------------------------------------------+
| Database | Create Database |
+----------+------------------------------------------------------------+
| t2 | CREATE DATABASE `t2` /*!40100 DEFAULT CHARACTER SET gbk */ |
+----------+------------------------------------------------------------+
1 row in set (0.00 sec)
mysql>
修改数据库
ALTER {
DATABASE | SCHEMA} [db_name] [DEFAULT] CHARACTER SET [=] character_name
删除数据库
DROP {
DATABASE | SCHEMA} [IF EXISTS] db_name
数据类型和操作数据表
数据类型决定了数据的存储格式,代表了不同的信息类型。
1.整型
2.浮点型
项目开发中以float居多
3.日期型
项目开发中该类型用得并不多,因为涉及到时区的问题,多用数字表示。
4.字符型
VARCHAR,TEXT,DATE,TIME,ENUM等类型的数据也需要单引号修饰,而INT,FLOAT,DOUBLE等则不需要。
使用某个数据库
mysql> USE test; # 使用数据库
Database changed
mysql> SELECT DATABASE(); #查看当前使用的数据库
+------------+
| DATABASE() |
+------------+
| test |
+------------+
1 row in set (0.00 sec)
mysql>
创建表
CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type,
……
)
创建用户表tb_user
CREATE TABLE tb_user(
username VARCHAR(20), -- 【用户名】
age TINYINT UNSIGNED, -- 【年龄】 无符号微整数(0~255)
salary FLOAT(8,2) UNSIGNED -- 【工资】 一共有8位,小数部分有2位
);
查看表
SHOW TABLES [FROM da_name] [LIKE 'pattern'|WHERE expr]
例如:
mysql> CREATE TABLE tb_user( # 创建表
-> username VARCHAR(20),
-> age TINYINT UNSIGNED,
-> salary FLOAT(8,2) UNSIGNED
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW TABLES; # 查看表
+----------------+
| Tables_in_test |
+----------------+
| tb_user |
+----------------+
1 row in set (0.00 sec)
mysql>
查看表结构
SHOW COLUMNS FROM tb_name # 或者
DESC tb_name
例如:
重命名表
RENAME TABLE 原名 TO 新名;
ALTER TABLE 原名 RENAME 新名;
ALTER TABLE 原名 RENAME TO 新名;
插入记录
INSERT [INTO] tb_name [(col_name,...)] VALUES(val,...)
例如:
mysql> INSERT tb_user VALUES('Tom',22,3658.32); # 当我们省略字段名的时候所有的字段都要赋值!
Query OK, 1 row affected (0.03 sec)
mysql> INSERT tb_user VALUES('Tom',22);
ERROR 1136 (21S01): Column count doesn't match value count at row 1
mysql>
mysql> INSERT tb_user(username,age) VALUES('Kitty',18); # 为指定字段赋值
Query OK, 1 row affected (0.03 sec)
记录的查询
SELECT expr,... FROM tb_name
例如:
mysql> SELECT * FROM tb_user; # 这里的*表示的是字段的过滤
+----------+------+---------+
| username | age | salary |
+----------+------+---------+
| Tom | 22 | 3658.32 |
| Kitty | 18 | NULL |
+----------+------+---------+
2 rows in set (0.00 sec)
空值与非空
NULL允许空值(默认),NOT NULL禁止非空。例如:
字段的自动编号
AUTO_INCREMENT
该字段要么是整数,要么小数位数为0,且必须和主键组合使用,默认情况下初始值为1,增量为1.——保证记录的唯一性。
主键约束(PRIMARY KEY):
每张表只能有一个主键,能够保证记录的唯一性,主键自动为NOT NULL
,并自动创建索引。
主键我们可以写成KEY或者PRIMARY KEY。
唯一约束——UNIQUE KEY
- 唯一约束也可以保证记录的唯一性
- 唯一约束的字段可以为NULL
- 一张表可以有多个唯一约束
mysql> CREATE TABLE tb_user(