(四)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]

 

posted @ 2020-08-02 20:32  来一杯大大大可  阅读(212)  评论(0编辑  收藏  举报