MySQL是世界上最受欢迎的关系型数据库管理系统之一,用于存储和管理数据。以下是对MySQL中常用语法的详细解释和案例分析:
1)登陆数据库:
使用`mysql -uroot -p`命令,输入密码后,可以登录到MySQL服务器。这里的`root`是用户名,`-p`后面跟的是密码。
2)查看所有数据库:
`SHOW DATABASES;`这条命令会列出当前用户有权限访问的所有数据库。
3)使用数据库:
`USE dbname;`选择要操作的数据库,`dbname`替换为你想要使用的数据库名。
4)创建数据库:
`CREATE DATABASE [IF NOT EXISTS] dbname DEFAULT CHARACTER SET utf8;`创建一个新的数据库,并指定默认的字符集为UTF8。`IF NOT EXISTS`确保在数据库已存在时不重复创建。
5)修改默认字符集:
`ALTER DATABASE dbname DEFAULT CHARACTER SET utf8;`改变已存在数据库的默认字符集。
6)删除数据库:
`DROP DATABASE dbname;`删除指定的数据库,需谨慎操作,因为数据将永久丢失。
7)查询表结构:
`DESCRIBE tbname;`或`DESC tbname;`显示表的列名、数据类型和其他信息。
8)创建表:
`CREATE TABLE tbname(`定义表结构,例如`id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), age INT);`创建一个包含id、name和age字段的表,id为主键并自动递增。
9)查看表数据:
`SELECT * FROM tbname;`使用星号(*)代表所有列,获取表中的所有数据。
10)插入数据:
`INSERT INTO tbname VALUES (值1, 值2,...);`或`INSERT INTO tbname (字段1, 字段2,...) VALUES (值1, 值2,...);`向表中插入新记录。
11)按字段查询数据:
`SELECT column1, column2... FROM tbname;`只选择需要的列。
12)别名查询:
`SELECT columnName AS nickname FROM tbname;`给列名起别名,方便阅读。
13)增加字段:
`ALTER TABLE tbname ADD COLUMN columnName INT(20);`向现有表中添加新列。
14)修改字段类型:
`ALTER TABLE tbname MODIFY COLUMN columnName VARCHAR(50);`改变列的数据类型。
15)修改字段名称:
`ALTER TABLE tbname CHANGE oldname newname CHAR(8);`更改列的名称。
16)设置自增长,主键:
`ALTER TABLE tbname MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT;`将列设置为主键且自动递增。
17)更新数据:
`UPDATE tbname SET columnname='更新的值' WHERE 条件;`根据条件更新记录。
18)排序查询:
`SELECT column1, column2... FROM tbname ORDER BY column1, column2;`默认升序,`DESC`表示降序。`ORDER BY 1`等同于`ORDER BY column1`,表示按第一列排序。
19)条件查询:
`BETWEEN`用于范围查询,`IN()`用于指定一组可能的值,`LIKE`用于模糊匹配,`NOT IN`和`NOT LIKE`则用于排除某些值。
20)连接查询:
- 等值连接:`SELECT * FROM tbname1 INNER JOIN tbname2 ON tb1.columnName = tb2.columnName;`
- 左连接:`LEFT JOIN ON`
- 右连接:`RIGHT JOIN ON`
聚合查询:
- `SUM(column_name)`求和
- `AVG(column_name)`平均值
- `MAX(column_name)`最大值
- `MIN(column_name)`最小值
- `COUNT(*)`记录总数
面试题解答:
使用`ORDER BY`语句对结果集进行排序,例如:
```sql
SELECT * FROM employees
WHERE department_no DESC, salary ASC;
```
这将先按照部门号降序排列,然后在每个部门内按工资升序排列。如果要按照部门号降序,工资也降序,可以使用:
```sql
SELECT * FROM employees
ORDER BY department_no DESC, salary DESC;
```