0%

mysql使用

Mysql安装

参考这个https://www.runoob.com/mysql/mysql-install.html
安装完成后会有一个root自动生成的密码,复制下来

Mysqld管理

Windows下启动mysqld

1
2

net start mysqld

Linux下启动MySQL服务

检查MySQL服务器是否启动

1
2

ps -ed |grep mysqld

启动服务:

1
2
3

cd /usr/bin
./mysqld_safe &

mysql 管理

登录mysql

在已添加环境目录条件下,直接打开命令行窗口

1
2

mysql -u root -p

输入安装时生成的密码,第一次使用需要修改root密码

1
2

alter user 'root'@'localhost' identified by '新密码';

添加用户

在root用户下,添加用户的方法
一种是权限账号分别赋予的方式

1
2
3
4
5

grant usage on [db].[table] to '[username]'@'[host]' identified by '[password]' with grant option;
grant select,update on *.* to '[username]'@'[host]';
grant insert on *.* to '[username]'@'[host]';
flush privileges;

另一种就是将两个步骤结合:

1
2
3

grant [privileges] on [db].[table] to '[username]'@'[host]' identified by '[password]';
flush privileges;

说明:

  1. db: 赋予指定的数据库权限,*代表所有库
  2. table: 赋予指定的数据表权限,*代表所有表
  3. username:用户名
  4. host: 登录主机,%代表任意(192.168.1.%代表192.168.1.0-192.168.1.255,其他类推)
  5. password: 密码
  6. privileges:权限,多个用,隔开,可选如下
    • select
    • insert
    • update
    • delete
    • create
    • …….

注意:在注意需要执行 FLUSH PRIVILEGES 语句。 这个命令执行后会重新载入授权表。

如果不使用该命令,重启mysql服务器前无法使用新账号登录
####

其他命令

查看所有用户:select User,Host from mysql.user;

1
2
3
4
5
6
7
8
9
10
11
12

mysql> select User,Host from mysql.user;
+---------------+-----------+
| User | Host |
+---------------+-----------+
| imsixn | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
| shixin | localhost |
+---------------+-----------+
5 rows in set (0.00 sec)

选择数据库:use dbname;

1
2
3

mysql> use shixindb;
Database changed

查看当前使用的数据库:select database();

1
2
3
4
5
6
7
8

mysql> select database();
+------------+
| database() |
+------------+
| shixindb |
+------------+
1 row in set (0.00 sec)

显示所有数据库:show databases;

1
2
3
4
5
6
7
8
9
10

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
....省略一部分
+--------------------+
5 rows in set (0.00 sec)

显示指定数据库中的所有表:show tables;

使用前需要用use指定数据库

1
2
3
4
5
6
7
8
9

mysql> show tables;
+--------------------+
| Tables_in_shixindb |
+--------------------+
| demo1 |
| emptb |
+--------------------+
2 rows in set (0.00 sec)

显示数据表结构:show columns from 数据表

选择数据表时可以用数据库.数据表,另外也可以用desc 数据表

1
2
3
4
5
6
7
8
9
10
11

mysql>desc shixindb.demo1;
...省略
mysql> show columns from shixindb.demo1;
+-----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+----------------+
| sx_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
...省略
+-----------+------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

mysql语法

创建数据库:create database 数据库名;

create database {if not exist} [dbname] {default character set [charset] collate [collate]}

  • if not exist:不存在该库时创建该库
  • dbname: 数据库名
  • default char…:设置默认编码集和检验方式
1
2
3

mysql> create database demo;
Query OK, 1 row affected (0.00 sec)

删除数据库:drop database 数据库名;

1
2
3

mysql> drop database demo;
Query OK, 0 rows affected (0.00 sec)

创建数据表:create table 表名

1
2

create table [tablename] (column_name column_type ,...)engine=InnoDB default charset=utf8

说明:

  • tablename:表名
  • cloumn_name:列名
  • column_type: 值类型
  • engine:数据库储存引擎,可省略
  • charset:编码集,可省略;
1
2
3
4
5
6
7
8
9
10
11
12
mysql> create table demoo(
-> stu_id int(11) not null auto_increment,
-> stu_name varchar(40) not null,
-> primary key (stu_id));
Query OK, 0 rows affected (0.03 sec)
mysql> show tables;
+--------------------+
| Tables_in_shixindb |
+--------------------+
| demoo |
+--------------------+
1 rows in set (0.00 sec)

primary key 指定主键

not null 指定该列所有值非空

auto_increment指定该值自动增加

删除数据表:drop table 表名;

删除数据表有两种方式

  • drop table 表名

    完全删除表,表的数据和表结构都将删除

  • truncate table 表名

    删除表中欧过的所有数据,自增的主键也会重新开始

delete from 表名也可以删除表中所有数据,但是它不会清楚计数,添加新行时,自增主键不会重新开始计数

插入数据:insert

insert into [tbname] (column1,column2,...) values (v1,v2,...);

自增主键可以省略

1
2
3

mysql> insert into demoo (stu_name) values ('李三');
Query OK, 1 row affected (0.01 sec)

如果所有的列都要添加数据可以不规定列进行添加数据(主键用0或者null代替):

1
2
3

mysql> insert into demoo values (null,'张四');
Query OK, 1 row affected (0.00 sec)

然后我们有了两个数据

1
2
3
4
5
6
7
8
9

mysql> select * from demoo;
+--------+----------+
| stu_id | stu_name |
+--------+----------+
| 1 | 李三 |
| 2 | 张四 |
+--------+----------+
2 rows in set (0.00 sec)

查询数据:select * from 表名;

1
2
3
4
5

SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M] [GROUP BY O][having G][order by Q]
  • SELECT 命令可以读取一条或者多条记录。
  • 使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
  • 使用 WHERE 语句来包含任何条件。可省略
  • 使用 LIMIT 属性来设定返回的记录数。可省略
  • 通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。可省略
  • 通过group by 进行分组
  • having用于对where和group by查询出来的分组经行过滤,查出满足条件的分组结果。它是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作。
  • order by 进行排序
1
2
3
4
5
6
7
8

mysql> select stu_id,stu_name from demoo where stu_id=1 limit 1 offset 0;
+--------+----------+
| stu_id | stu_name |
+--------+----------+
| 1 | 李三 |
+--------+----------+
1 row in set (0.01 sec)
where子句

可以用=,>,<,>=,<=,!=或<>分别代表等于,大于,小于,大于等于,小于等于,不等:

1
2
3
4
5
6
7
8

mysql> select * from demoo where stu_id >1;
+--------+----------+
| stu_id | stu_name |
+--------+----------+
| 2 | 张四 |
+--------+----------+
1 row in set (0.00 sec)

and or拼接多个条件:

1
2
3
4
5
6
7
8

mysql> select * from demoo where stu_id >1 or stu_id != 1;
+--------+----------+
| stu_id | stu_name |
+--------+----------+
| 2 | 张四 |
+--------+----------+
1 row in set (0.00 sec)

更新数据:update tbname set field1=value1...;

1
2
3

UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]

不加where的话,表中所有的数据都将被替换

将某一值改回默认值:update tbname set field=default where ...

1
2
3
4
5
6
7
8
9
10
11
12

mysql> update demoo set stu_name='李四' where stu_id=2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from demoo;
+--------+----------+
| stu_id | stu_name |
+--------+----------+
| 1 | 李三 |
| 2 | 李四 |
+--------+----------+
2 rows in set (0.00 sec)

删除某行数据:delete from tbname [where];

不写where条件的话,将会删除所有数据

删除某一项后,主键计数不会改变

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

mysql> delete from demoo where stu_id=2;
Query OK, 1 row affected (0.00 sec)

mysql> insert into demoo values(null,'王二');
Query OK, 1 row affected (0.00 sec)

mysql> select * from demoo;
+--------+----------+
| stu_id | stu_name |
+--------+----------+
| 1 | 李三 |
| 3 | 王二 |
+--------+----------+
2 rows in set (0.00 sec)

LIKE 子句

举例:

  • show variables like 'character%':

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    mysql> show variables like 'character%';
    +--------------------------+------------------------------------------------------+
    | Variable_name | Value |
    +--------------------------+------------------------------------------------------+
    | character_set_client | utf8 |
    | character_set_connection | utf8 |
    ...
    +--------------------------+------------------------------------------------------+
    8 rows in set, 1 warning (0.00 sec)
  • select * from demoo where stu_name like '李%':

%类似于通配符*,表示任意 0 个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。

_表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句。

[]表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

[^] 表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。

查询内容包含通配符时,由于通配符的缘故,导致我们查询特殊字符 “%”、“_”、“[” 的语句无法正常实现,而把特殊字符用 “[ ]” 括起便可正常查询。

欢迎关注我的其它发布渠道