(四)MySql常用命令
登录MySQL
连接本机的MySQL:
Windows下:Windows+r ->输入cmd进入命令行窗口;输入
mysql -u root -p密码
进入mysql
Mac端:
直接使用上述命令会报错;
解决办法:
在终端输入
alias mysql=/usr/local/mysql/bin/mysql
alias mysqladmin=/usr/local/mysql/bin/mysqladmin
接着再输入
mysql -uroot -p
就可以连接上了。但是!这个办法在下次使用mysql的时候又要重新输入那两个命令。因此!
在命令行中输入
sudo open .bash_profile
打开.bash_profile配置环境变量,直接复制粘贴以下代码到文件末尾。保存后重启终端,就可以正常使用mysql了!!
export PATH=${PATH}:/usr/local/mysql/bin
连接远程主机:
mysql -h远程主机IP -u远程主机用户名 -p远程主机密码
退出MySQL:
exit /*或者quit*/
修改密码
mysqladmin -u用户名 -p旧密码 password 新密码
root密码为空时设置root密码:
mysql mysqladmin -uroot newpassword; /* 因为开始时root没有密码,所以-p旧密码 可以省略*/
使用sqladmin命令修改密码:
mysqladmin -uroot -p密码 password 新密码;
使用set password命令修改密码:
set password for 用户名@localhost = password('新密码');
忘记root密码:
①关闭正在运行的MySQL服务。
②打开DOS窗口,转到mysql\bin目录。
③输入mysqld --skip-grant-tables 回车。--skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。
④再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),输入mysql回车,如果成功,将出现MySQL提示符 >。
⑤连接权限数据库: use mysql; 。
⑥改密码:update user set password=password("新密码") where user="root";(别忘了最后加分号) 。
⑦刷新权限(必须步骤):flush privileges; 。
⑧退出mysql quit;。
mysqld --skip-grant-tables mysql> use mysql; /*连接权限数据库*/ mysql> update user set password=password("新密码") where user="root"; /* 改密码*/ mysql> flush privileges; /* 刷新权限*/ mysql> quit; /*退出mysql*/
MySQL常用命令
数据定义语言(Data Definition Language,DDL)
- 对象:数据库和表
- 关键词: create alter drop truncate(删除当前表再新建一个一模一样的表结构)
CREATE、DROP
create database db_name; -- 创建数据库 show databases; -- 显示所有的数据库
drop database db_name; -- 删除数据库 use db_name; -- 选择数据库
create table tb_name (字段名 varchar(20), 字段名 char(1)); -- 创建数据表模板 show tables; -- 显示数据表 desc tb_name; -- 显示表结构 drop table tb_name; -- 删除表
查看MySQL支持的字符集命令:SHOW CHARACTER SET 查看MySQL字符集支持的校对集命令:SHOW COLLATION #在创建时指定数据库字符集 语法:CREATE DATABASE 数据库名 CHARACTER SET 字符集 COLLATE 校对集 例子:CREATE DATABASE test_db CHARACTER SET utf8 COLLATE utf8_general_ci;
创建数据表实例
mysql> use mydb; Database changed mysql> create table mytable( -> id INT NOT NULL AUTO_INCREMENT, -> name VARCHAR(100) NOT NULL, -> phone CHAR(11) NOT NULL, -> submission_date DATE, -> PRIMARY KEY (id ) -> )ENGINE=InnoDB DEFAULT CHARSET=utf8; Query OK, 0 rows affected (0.16 sec) mysql>
- 如果不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
- AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
- PRIMARY KEY关键字用于定义列为主键。 可以使用多列来定义主键,列间以逗号分隔。
- ENGINE 设置存储引擎,CHARSET 设置编码。
- 对于手机号的存储,手机号本质上是一个字符串,因此存储类型应该是char(11),这样也方便后续的特殊查询操作。
ALTER
- 修改表名
ALTER TABLE 表名 RENAME TO 新表名 #或 RENAME TABLE 原表名 TO 新表名 #例子: ALTER TABLE test_table RENAME TO test_table_new; RENAME TABLE test_table_new TO test_table_newnew;
- 新增表属性
ALTER TABLE 表名 ADD 属性名称 数据类型 例: ALTER TABLE test_table ADD name VARCHAR(20);
- 修改属性
ALTER TABLE 表名 MODIFY 属性名 新数据类型 #只修改数据类型 ALTER TABLE 表名 CHANGE 属性名 新属性名 新数据类型 #同时修改属性名和数据类型 例:ALTER TABLE test_table MODIFY name VARCHAR(50); ALTER TABLE test_table CHANGE name name2 VARCHAR(50);
- 删除属性。如果表中只有一个属性,不允许删除
ALTER TABLE 表名 DROP 属性名称 例:ALTER TABLE test_table DROP name;
数据操纵语言(Data Manipulation Language,DML)
- 对象:纪录(行)
- 关键词:insert update delete
插入数据(insert into)
mysql数据类型详见:https://www.runoob.com/mysql/mysql-data-types.html;
用于向表格中插入新的行:
/*第一种形式无需指定要插入数据的列名,只需提供被插入的值即可,这个语句会插入所有字段*/ insert into tb_name values (value1,value2,value3,...); /*第二种形式需要指定列名及被插入的值,这个语句插入指定字段*/ insert into tb_name (column1,column2,column3,...) values (value1,value2,value3,...);
更新数据(update)
UPDATE table_name SET field1=new_value1, field2=new_value2 [WHERE Clause];
删除数据(delete)
-
开发中很少使用delete,删除有物理删除和逻辑删除,其中逻辑删除可以通过给表添加一个字段(isDel),若值为1,代表删除;若值为0,代表没有删除。此时,对数据的删除操作就变成了update操作了。
-
truncate和delete的区别:truncate是删除表,再重新创建这个表。属于DDL,delete是一条一条删除表中的数据,属于DML。
DELETE FROM 表名 [WHERE 子句];
数据查询语言DQL(Data Query Language)
查询数据(select)
SELECT column_name,column_name FROM table_name where [clause] [LIMIT N][ OFFSET M]
- 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
- SELECT 命令可以读取一条或者多条记录。
- 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
- 你可以使用 WHERE 语句来包含任何条件。
- 你可以使用 LIMIT 属性来设定返回的记录数。
- 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
where子句
- 可以在 WHERE 子句中指定任何条件。
- 可以使用 AND 或者 OR 指定一个或多个条件。
- WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。
- WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。
操作符 | 描述 |
---|---|
= | 等号,检测两个值是否相等,如果相等返回true |
<>, != | 不等于,检测两个值是否相等,如果不相等返回true |
> | 大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true |
< | 小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true |
>= | 大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true |
<= | 小于等于号,检测左边的值是否小于或等于右边的值, 如果左边的值小于或等于右边的值返回true |
LIKE子句
SELECT field1, field2,...fieldN FROM table_name WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
LIKE 通常与 % 一同使用,类似于一个元字符的搜索。如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。
实例:查询名字含张的员工信息
union
SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditions] UNION [ALL | DISTINCT] SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditions];
-
expression1, expression2, ... expression_n: 要检索的列。
-
tables: 要检索的数据表。
-
WHERE conditions: 可选, 检索条件。
-
DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
-
ALL: 可选,返回所有结果集,包含重复数据。
- UNION 只会选取不同的值。使用 UNION ALL 来选取重复的值!
实例:分别使用 UNION 和UNION ALL 从 "emp" 和 "job" 表中选取所有的deptno的数据(也有重复的值):
排序(order by)
SELECT field1, field2,...fieldN FROM table_name1, table_name2... ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]
- 可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
- 可以添加 WHERE...LIKE 子句来设置条件。
分组(group by)
SELECT column_name, function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name;
- group by语句用在where语句之后。
实例:查询emp表里每个部门的人数
HAVING子句
删除(delete)
DELETE FROM table_name [WHERE Clause]