MySQL详细的操作_MySQL

Jun 01, 2016 pm 01:45 PM
データベース

bitsCN.com

创建数据库luowei
mysql> CREATE DATABASE luowei;

使用数据库
mysql> use luowei

创建表study
mysql> CREATE TABLE study ( ID bigint(20) NOT NULL AUTO_INCREMENT UNIQUE,  Name varchar(255) NOT NULL, Age int(10),Gender enum('F','M')  DEFAULT 'M');

查询表study;
mysql> SELECT * FROM study;

查看表的结构:
mysql> DESC study;
+--------+---------------+------+-----+---------+----------------+
| Field  | Type          | Null | Key | Default | Extra          |
+--------+---------------+------+-----+---------+----------------+
| ID     | bigint(20)    | NO   | PRI | NULL    | auto_increment |
| Name   | varchar(255)  | NO   |     | NULL    |                |
| Age    | int(10)       | YES  |     | NULL    |                |
| Gender | enum('F','M') | YES  |     | M       |                |
+--------+---------------+------+-----+---------+----------------+

插入数据;
mysql> INSERT INTO study (Name) VALUE ('luowei'); //单个插入
mysql> INSERT INTO study (Name) VALUE ('Qi'),('Ro'),('RQ'); //批量插入
mysql> INSERT INTO study SET Name='Hua';  //使用SET插入
mysql> SELECT * FROM study;
+----+--------+------+--------+
| ID | Name   | Age  | Gender |
+----+--------+------+--------+
|  1 | luowei | NULL | M      |
|  2 | Qi     | NULL | M      |
|  3 | Ro     | NULL | M      |
|  4 | RQ     | NULL | M      |
|  5 | Hua    | NULL | M      |
+----+--------+------+--------+
5 rows in set (0.00 sec)
这是插入数据后的一个简单的表的内容

修改表的数据
mysql> UPDATE study SET Gender='F' WHERE ID=2; //把ID=2的Gender改为F
mysql> UPDATE study SET Gender='F' WHERE ID IN (4,5);//批量处理
mysql> SELECT * FROM study;
+----+--------+------+--------+
| ID | Name   | Age  | Gender |
+----+--------+------+--------+
|  1 | luowei | NULL | M      |
|  2 | Qi     | NULL | F      |
|  3 | Ro     | NULL | M      |
|  4 | RQ     | NULL | F      |
|  5 | Hua    | NULL | F      |
+----+--------+------+--------+

删除表中的数据
mysql> DELETE FROM study WHERE ID=5;//删除指定的行
mysql> SELECT * FROM study;
+----+--------+------+--------+
| ID | Name   | Age  | Gender |
+----+--------+------+--------+
|  1 | luowei | NULL | M      |
|  2 | Qi     | NULL | F      |
|  3 | Ro     | NULL | M      |
|  4 | RQ     | NULL | F      |
+----+--------+------+--------+
但是这个时候如果我们在再次插入的话ID号会从原来删除的编号增加
mysql> SELECT LAST_INSERT_ID();//显示上次插入的是第几个
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                5 |
+------------------+
mysql> INSERT INTO study (Name) VALUE ('aQ');
mysql> SELECT * FROM study;
+----+--------+------+--------+
| ID | Name   | Age  | Gender |
+----+--------+------+--------+
|  1 | luowei | NULL | M      |
|  2 | Qi     | NULL | F      |
|  3 | Ro     | NULL | M      |
|  4 | RQ     | NULL | F      |
|  6 | aQ     | NULL | M      |
+----+--------+------+--------+
看到了吧,不是依次增长的,而是有间隔,现在我们在删除了ID为6的行,然后插入设置他的ID为5,接着再自动插入;
mysql> DELETE FROM study WHERE ID=6;
mysql> INSERT INTO study SET ID=5,Name='pk';
mysql> INSERT INTO study (Name) VALUE ('jk');
mysql> SELECT * FROM study;
+----+--------+------+--------+
| ID | Name   | Age  | Gender |
+----+--------+------+--------+
|  1 | luowei | NULL | M      |
|  2 | Qi     | NULL | F      |
|  3 | Ro     | NULL | M      |
|  4 | RQ     | NULL | F      |
|  5 | pk     | NULL | M      |
|  7 | jk     | NULL | M      |
+----+--------+------+--------+
可以看出还是不会按照我们的意思让他接着自动增长,这个时候我们可以通过设置,让他重新按照我们设置的为起点自动增长
mysql> DELETE FROM study WHERE ID=7;
mysql> ALTER TABLE study AUTO_INCREMENT=5;//设置自动增长的起点
mysql> INSERT INTO study (Name) VALUE ('jk');
mysql> INSERT INTO study (Name) VALUE ('OL');
mysql> SELECT * FROM study;
+----+--------+------+--------+
| ID | Name   | Age  | Gender |
+----+--------+------+--------+
|  1 | luowei | NULL | M      |
|  2 | Qi     | NULL | F      |
|  3 | Ro     | NULL | M      |
|  4 | RQ     | NULL | F      |
|  5 | pk     | NULL | M      |
|  6 | jk     | NULL | M      |
|  7 | OL     | NULL | M      |
+----+--------+------+--------+
又OK了,我估计QQ在设置QQ号的时候也是通过这种方式,保留小于5位的QQ号,所有大家用的都是7位以上的(题外话,呵呵)。

修改表结构
如果想插入一个新的字段,可以使用ALTER来修改
mysql> DESC study;//原本表的结构
+--------+---------------+------+-----+---------+----------------+
| Field  | Type          | Null | Key | Default | Extra          |
+--------+---------------+------+-----+---------+----------------+
| ID     | bigint(20)    | NO   | PRI | NULL    | auto_increment |
| Name   | varchar(255)  | NO   |     | NULL    |                |
| Age    | int(10)       | YES  |     | NULL    |                |
| Gender | enum('F','M') | YES  |     | M       |                |
+--------+---------------+------+-----+---------+----------------+
mysql> ALTER TABLE study ADD Work INT ;
mysql> DESC study;
+--------+---------------+------+-----+---------+----------------+
| Field  | Type          | Null | Key | Default | Extra          |
+--------+---------------+------+-----+---------+----------------+
| ID     | bigint(20)    | NO   | PRI | NULL    | auto_increment |
| Name   | varchar(255)  | NO   |     | NULL    |                |
| Age    | int(10)       | YES  |     | NULL    |                |
| Gender | enum('F','M') | YES  |     | M       |                |
| Work   | int(11)       | YES  |     | NULL    |                |
+--------+---------------+------+-----+---------+----------------+
默认插入最后一行,如果想插入指定的行,可以使用AFTER,FIRST等参数
mysql> ALTER TABLE study ADD Master VARCHAR(30) AFTER Gender;
mysql> DESC study;
+--------+---------------+------+-----+---------+----------------+
| Field  | Type          | Null | Key | Default | Extra          |
+--------+---------------+------+-----+---------+----------------+
| ID     | bigint(20)    | NO   | PRI | NULL    | auto_increment |
| Name   | varchar(255)  | NO   |     | NULL    |                |
| Age    | int(10)       | YES  |     | NULL    |                |
| Gender | enum('F','M') | YES  |     | M       |                |
| Master | varchar(30)   | YES  |     | NULL    |                |
| Work   | int(11)       | YES  |     | NULL    |                |
+--------+---------------+------+-----+---------+----------------+
这就把新插入的字段放在了Gender的后面了
如果我们想把原来的表中字段的名字改一下,比如我想把Work改成work
mysql> ALTER TABLE study CHANGE Work work INT;//修改表中的字段
mysql> DESC study;
+--------+---------------+------+-----+---------+----------------+
| Field  | Type          | Null | Key | Default | Extra          |
+--------+---------------+------+-----+---------+----------------+
| ID     | bigint(20)    | NO   | PRI | NULL    | auto_increment |
| Name   | varchar(255)  | NO   |     | NULL    |                |
| Age    | int(10)       | YES  |     | NULL    |                |
| Gender | enum('F','M') | YES  |     | M       |                |
| Master | varchar(30)   | YES  |     | NULL    |                |
| work   | int(11)       | YES  |     | NULL    |                |
+--------+---------------+------+-----+---------+----------------+
可以实现效果
当让还可以通过使用MODIFY来试下对表中字段的属性进行设置
mysql> ALTER TABLE study MODIFY work VARCHAR(30) NOT NULL ;
mysql> DESC study;
+--------+---------------+------+-----+---------+----------------+
| Field  | Type          | Null | Key | Default | Extra          |
+--------+---------------+------+-----+---------+----------------+
| ID     | bigint(20)    | NO   | PRI | NULL    | auto_increment |
| Name   | varchar(255)  | NO   |     | NULL    |                |
| Age    | int(10)       | YES  |     | NULL    |                |
| Gender | enum('F','M') | YES  |     | M       |                |
| Master | varchar(30)   | YES  |     | NULL    |                |
| work   | varchar(30)   | NO   |     | NULL    |                |
+--------+---------------+------+-----+---------+----------------+
但是如果你表中原本work中没有字段的话,会有warning,所以在你做的时候可以先添加数据,然后在修改。
随着发展,我发现后面的work这个字段没用了,想删除study表中的这个属性
mysql> ALTER TABLE study DROP work;
mysql> DESC study;
+--------+---------------+------+-----+---------+----------------+
| Field  | Type          | Null | Key | Default | Extra          |
+--------+---------------+------+-----+---------+----------------+
| ID     | bigint(20)    | NO   | PRI | NULL    | auto_increment |
| Name   | varchar(255)  | NO   |     | NULL    |                |
| Age    | int(10)       | YES  |     | NULL    |                |
| Gender | enum('F','M') | YES  |     | M       |                |
| Master | varchar(30)   | YES  |     | NULL    |                |
+--------+---------------+------+-----+---------+----------------+
当然如果我们表中有索引(目前),也可以使用DROP删除索引
mysql> SHOW INDEX FROM study;//查看表的索引
mysql> ALTER TABLE study ADD INDEX index_name(Name);//添加索引
也可以私用KEY(mysql> ALTER TABLE study ADD KEY index_name(Name);)
mysql> SHOW INDEX FROM study;
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name   | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| study |          0 | ID         |            1 | ID          | A         |           7 |     NULL | NULL   |      | BTREE      |         |
| study |          1 | index_name |            1 | Name        | A         |        NULL |     NULL | NULL   |      | BTREE      |         |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
mysql> ALTER TABLE study DROP INDEX index_name;//删除索引
现在我觉得表明有点长,想换一个短的来方便下面的实验,当然在实际的过程中,我们应该见名知意
mysql> ALTER TABLE study RENAME TO st;//把表名从study改成st
mysql> SHOW TABLES;
+------------------+
| Tables_in_luowei |
+------------------+
| st               |
+------------------+
想查看当前的数据库可以使用一下命令
mysql> SELECT DATABASE();
mysql> SHOW TABLES;//显示当前数据库中的表

mysql> SELECT * FROM st;
+----+--------+------+--------+--------+
| ID | Name   | Age  | Gender | Master |
+----+--------+------+--------+--------+
|  1 | luowei | NULL | M      | NULL   |
|  2 | Qi     | NULL | F      | NULL   |
|  3 | Ro     | NULL | M      | NULL   |
|  4 | RQ     | NULL | F      | NULL   |
|  5 | pk     | NULL | M      | NULL   |
|  6 | jk     | NULL | M      | NULL   |
|  7 | OL     | NULL | M      | NULL   |
+----+--------+------+--------+--------+
这里我只有一个表,现在我修改一下表中的数据,把Master的类型改为INT,并添加一些数据在里面
mysql> ALTER TABLE st CHANGE MODIFY Master INT;
mysql> UPDATE st SET Master=1 WHERE ID=1;
mysql> UPDATE st SET Master=2 WHERE ID=2;
mysql> UPDATE st SET Master=3 WHERE ID=3;
mysql> UPDATE st SET Master=4 WHERE ID=4;
mysql> UPDATE st SET Master=7 WHERE ID=5;
mysql> UPDATE st SET Master=8 WHERE ID=6;
mysql> UPDATE st SET Master=5 WHERE ID=7;
mysql> SELECT * FROM st;
+----+--------+------+--------+--------+
| ID | Name   | Age  | Gender | Master |
+----+--------+------+--------+--------+
|  1 | luowei | NULL | M      |      1 |
|  2 | Qi     | NULL | F      |      2 |
|  3 | Ro     | NULL | M      |      3 |
|  4 | RQ     | NULL | F      |      4 |
|  5 | pk     | NULL | M      |      7 |
|  6 | jk     | NULL | M      |      8 |
|  7 | OL     | NULL | M      |      5 |
+----+--------+------+--------+--------+
现在表的基本情况如上所示。当然我们为了方便记录Master,使用是INT来标,其实Master是一个姓名,所以我们再建立一个新表mt,来记录Master的对应的关系
mysql> CREATE TABLE mt(
    -> id INT NOT NULL UNIQUE AUTO_INCREMENT ,
    -> name VARCHAR(30) NOT NULL );
mysql> INSERT INTO mt (name) VALUE ('A');
......
自己多插入几行,我这里就省略了
mysql> SELECT * FROM mt;
+----+------+
| id | name |
+----+------+
|  1 | A    |
|  2 | B    |
|  3 | C    |
|  4 | D    |
|  5 | E    |
|  6 | F    |
+----+------+
好了现在两个表准备好了,接下来我将做一下多表之间的查询
多表之间的查询可以分为:
  交叉查询:笛卡尔乘积,两表相乘;
  内连接:对称连接,就是显示两个表中都有的,一个表中如果没有,就不显示了;
  外连接:非对称连接
    左外连接:LEFT JOIN ON 左表中的都显示,右表中无的话显示为NULL
    右外连接:RIGHT JOIN ON 右表中的都显示,左表中无的话显示为NULL
  自连接:一个表中的一列建立在同张表的另一列;
  UNION:连接两个表;
接下来分别对上面的情况进行实验;
1.交叉查询:
mysql> SELECT * FROM st,mt;
42 rows in set (0.00 sec)//中间的数据就省略了,这里的结果就是两个表的行数相乘的结果;
2.内连接:
mysql> SELECT st.Name,mt.name FROM st,mt WHERE st.Master=mt.id;
+--------+------+
| Name   | name |
+--------+------+
| luowei | A    |
| Qi     | B    |
| Ro     | C    |
| RQ     | D    |
| OL     | E    |
+--------+------+
3.左外连接:
mysql> SELECT st.Name,mt.name FROM st LEFT JOIN  mt  ON st.Master=mt.id;
+--------+------+
| Name   | name |
+--------+------+
| luowei | A    |
| Qi     | B    |
| Ro     | C    |
| RQ     | D    |
| pk     | NULL |
| jk     | NULL |
| OL     | E    |
+--------+------+
这时候我们可以看到,凡是左表中有的,都显示了,右表中没有的都显示为NULL了;
4.右外连接:
mysql> SELECT st.Name,mt.name FROM st RIGHT JOIN  mt  ON st.Master=mt.id;
+--------+------+
| Name   | name |
+--------+------+
| luowei | A    |
| Qi     | B    |
| Ro     | C    |
| RQ     | D    |
| OL     | E    |
| NULL   | F    |
+--------+------+
5.自连接:
mysql> SELECT k1.Name,k2.Gender FROM st AS k1,st AS k2 WHERE k1.ID = k2.Master;
+--------+--------+
| Name   | Gender |
+--------+--------+
| luowei | M      |
| Qi     | F      |
| Ro     | M      |
| RQ     | F      |
| OL     | M      |
| pk     | M      |
+--------+--------+
6.UNION;
mysql> SELECT ID AS new_id,Name AS new_name FROM st UNION SELECT id AS new_id,name AS new_name FROM mt;
+--------+----------+
| new_id | new_name |
+--------+----------+
|      1 | luowei   |
|      2 | Qi       |
|      3 | Ro       |
|      4 | RQ       |
|      5 | pk       |
|      6 | jk       |
|      7 | OL       |
|      1 | A        |
|      2 | B        |
|      3 | C        |
|      4 | D        |
|      5 | E        |
|      6 | F        |
+--------+----------+
13 rows in set (0.00 sec)这样就把两个表连接到了一起了。

多表操作就到此了,接下来要说的是数据库中的视图,子查询,事务,同步的相关知识了;
我就以st这个表为基础:
mysql> SELECT * FROM st;
+----+--------+------+--------+--------+
| ID | Name   | Age  | Gender | Master |
+----+--------+------+--------+--------+
|  1 | luowei | NULL | M      |      1 |
|  2 | Qi     | NULL | F      |      2 |
|  3 | Ro     | NULL | M      |      3 |
|  4 | RQ     | NULL | F      |      4 |
|  5 | pk     | NULL | M      |      7 |
|  6 | jk     | NULL | M      |      8 |
|  7 | OL     | NULL | M      |      5 |
+----+--------+------+--------+--------+
视图:就是建立在基表上执行查询语句的一系列的虚表
创建视图:
mysql> CREATE VIEW view AS SELECT ID,Name,Gender FROM st;//创建一个查询显示ID,Name,Gender的视图;
mysql> SELECT * FROM view;
+----+--------+--------+
| ID | Name   | Gender |
+----+--------+--------+
|  1 | luowei | M      |
|  2 | Qi     | F      |
|  3 | Ro     | M      |
|  4 | RQ     | F      |
|  5 | pk     | M      |
|  6 | jk     | M      |
|  7 | OL     | M      |
+----+--------+--------+
删除视图可以使用
mysql> DROP VIEW view;
子查询语句:(其实MySQL的子查询支持的还不是很好)
mysql> SELECT * FROM view WHERE ID > 0;
我就借用刚建立的视图进行查询,其实这个是多此一举的做法,呵呵,只是演示一下效果,当让在工作中可能会遇到更多的问题的。

事务:transact
事务就是几个Sql语句要么都执行,要么都不执行,这样就防治一方执行,另一方没执行,从而产生虚拟的假象,比如A通过银行向B转账,如果这个时候A刚转出去,B那边的断电了(假设,其实这样的事出现的概率还是蛮小的,呵呵),所以等A和B见面之后,就说不清了,所以事务就是如果两个都没实现,就是A发送成功,B接受成功,才能算是真正的成功,所以这样就能避免不必要的损失。
接下来介绍一下事务隔离的级别:
1.读未提交 READ UNCOMMITED
2.读提交 READ COMMITED
3.可重读 REPEATABLE READ 默认
4.串行化 SERIABLIZABLE
从1-->4隔离级别依次增加,并发性依次降低
mysql> SHOW VARIABLES LIKE 'tx_isolation';//查看系统使用的默认的隔离级别
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| tx_isolation  | REPEATABLE-READ |
+---------------+-----------------+

但是如果我们的数据库使用的引擎是MyISAM的话,就不支持事务,查看数据库使用的引擎命令如下
mysql> SHOW ENGINES;或使用SHOW TABLE STATUS LIKE 'st';或使用SHOW TABLE STATUS ;都能查看
+------------+---------+----------------------------------------------------------------+
| Engine     | Support | Comment                                                        |
+------------+---------+----------------------------------------------------------------+
| MyISAM     | DEFAULT | Default engine as of MySQL 3.23 with great performance         |
| MEMORY     | YES     | Hash based, stored in memory, useful for temporary tables      |
| InnoDB     | YES     | Supports transactions, row-level locking, and foreign keys     |
| BerkeleyDB | YES     | Supports transactions and page-level locking                   |
| BLACKHOLE  | NO      | /dev/null storage engine (anything you write to it disappears) |
| EXAMPLE    | NO      | Example storage engine                                         |
| ARCHIVE    | NO      | Archive storage engine                                         |
| CSV        | NO      | CSV storage engine                                             |
| ndbcluster | NO      | Clustered, fault-tolerant, memory-based tables                 |
| FEDERATED  | NO      | Federated MySQL storage engine                                 |
| MRG_MYISAM | YES     | Collection of identical MyISAM tables                          |
| ISAM       | NO      | Obsolete storage engine                                        |
+------------+---------+----------------------------------------------------------------+
显示为DEFAULT的是默认使用的引擎,应为这个时候数据库不支持事务,为了演示事务的效果,我把mysql的引擎改为InnoDB ,使用如下命令:
mysql> SET SESSION storage_engine = InnoDB;
然后在这个引擎的基础上建立一个表
mysql> CREATE TABLE tt (
    -> tid INT UNIQUE NOT NULL AUTO_INCREMENT,
    -> tname VARCHAR(30) NOT NULL,
    -> tage INT);
插入数据如下图所示,当然你可以自己随便添加表中的数据
mysql> SELECT * FROM tt;
+-----+-------+------+
| tid | tname | tage |
+-----+-------+------+
|   1 | ser   | NULL |
|   2 | linux | NULL |
|   3 | php   | NULL |
+-----+-------+------+
查看当前表的存储引擎
mysql> SHOW TABLE STATUS LIKE 'tt';
显示的结果是InnoDB的引擎;
1.设置为READ UNCOMMITTED(读未提交)的级别
mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;//修改隔离级别为READ UNCONMMITED显示为REPEATABLE-READ
mysql> SHOW VARIABLES LIKE 'tx_isolation';
+---------------+------------------+
| Variable_name | Value            |
+---------------+------------------+
| tx_isolation  | READ-UNCOMMITTED |
+---------------+------------------+
这个级别下,如果两个事务同时进行,任何一方的改变,对方都能看到,因为我们在设置的时候采用的是SESSION,会话的模式,所以两个终端都要进行READ UNCOMMITTED设置

MySQL详细的操作_MySQL

所以这个的设置的并发性最好,但是受到的影响却是最大的
2.设置为READ COMMITED(读提交)级别
这个级别下,当其中的任意一个事务提交了,其他处于事务状态的就能同步到信息,如下图是没有提交之前的图,这个时候还不能看到

MySQL详细的操作_MySQL
 
如果B的事务提交了,再来看看这个结果,如下图所示:

MySQL详细的操作_MySQL

尽管A没有提交,但是也能看到信息了
3.设置为REPEATABLE READ(可重读)级别
如果设置为这个级别的话,两个同时进行的事务,相互不受影响,只用当两个事务都提交了才能看到所有变化的信息,否则,各自只能看到自己完成的
我现在打开两个终端A、B,同时进入事务
mysql> START TRANSACTION;//A进入事务状态
mysql> START TRANSACTION;//B进入事务状态
然后我在B事务状态下向表进行插入一行数据,然后在两个表中都查看,结果发现数据不一样,如下图所示:

MySQL详细的操作_MySQL

如果我现在把B的事务提交了,再在A、B上查看,发现只有B上的有新插入的一行,而A任然没有,如图所示:

MySQL详细的操作_MySQL

如果我现在把A的也提交了,在查看的话,两个就会出现数据同步了,如图所示:

MySQL详细的操作_MySQL

这就是REPEATABLE READ级别的效果,就是两个事务操作的时候相互不干扰,只有当两个事务都提交了,数据才会同步。
4.设置为SERIABLIZABLE级别
这个时候只有当前一个事务执行完成并提交了,下一个事务才开始,做了更加严格的限制,所以一般不做这样的级别限制
 
同步:(clock)
  通过锁机制来解决同步问题
  锁:
    共享锁(读锁):
    独占锁(写锁): 
    写锁的优先级高于读锁
    锁级别:
      表锁,行锁,页锁(内存空间)
    锁的实现:
      服务器级别的;只能实现表锁
      存储引擎级别的:可以实现行锁
    >LOCK TABLES tab_name READ;加锁
    >UNLOCK TABLES;释放锁
    (注意:如果在InnoDB中,定义时候并不生效,只有真正的事务开始,
     定义的锁才生效)
    降低粒度,可以更好的支持并发性,这样锁的颗粒就越小,类似行锁,锁的
    范围小一些。
 
MYSQL的用户管理:
创建用户
CREATE USER username@host
删除用户
DROP USER username@host
授权
GRANT PRIV_LIST ON db.table TO username@host [IDENTIFIED BY 'redhat'];
收回权限
REVOKE priv_list ON db.table FROM username@host;
WITH GRANT OPTION 同时把授权也一并授权给他
设置其使用的资源:
WITH MAX_QUERIES_PER_HOUT N;每个小时只能做N次查询
WITH MAX_UPDATES_PER_HOUT N每个小时只能做N次更新
WITH MAX_CONNECTIONS_PER_HOUT N  每个小时只能做N次连接
WITH MAX_USER_CONNECTIONS N 每个用户同时最大连接数
FLUSH USER_RESOURCES;
GRANT SELECT(name) ON db.table TO uername@host;字段级别的权限
执行存储过程的权限
GRANT EXECUTE ON XXXX TO username@host
 
 
忘记MySQL的密码:
方法1.重装数据库
方法2.
vim /etc/init.d/mysqld
先停止MySQL服务
#service mysqld stop
找到mysqld的二进制文件的位置,我这里就在/user/local/mysql/下
#/user/local/mysql/bin/mysqld_safe --skip-grant-tables --skip-networking & 后台运行安全模式
然后连接数据库
#mysql
>use mysql
>UPDATE user SET Password=PASSWORD('redhat') WHERE User='root' AND Host='localhost';
>UPDATE user SET Password=PASSWORD('redhat') WHERE User='root' AND Host='127.0.0.1';
#killall mysqqld
#service mysqld start
#mysql -uroot -p  登录
 
 
 
 
 
作者 “IT梦-齐-分享”

bitsCN.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Go 言語はデータベースの追加、削除、変更、クエリ操作をどのように実装しますか? Go 言語はデータベースの追加、削除、変更、クエリ操作をどのように実装しますか? Mar 27, 2024 pm 09:39 PM

Go 言語は、効率的かつ簡潔で習得が容易なプログラミング言語であり、同時プログラミングやネットワーク プログラミングに優れているため、開発者に好まれています。実際の開発ではデータベースの操作が欠かせませんが、今回はGo言語を使ってデータベースの追加・削除・変更・クエリ操作を実装する方法を紹介します。 Go 言語では、データベースを操作するために通常、よく使用される SQL パッケージや gorm などのサードパーティ ライブラリを使用します。ここでは SQL パッケージを例として、データベースの追加、削除、変更、クエリ操作を実装する方法を紹介します。 MySQL データベースを使用していると仮定します。

iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます Jul 18, 2024 am 05:48 AM

Apple の最新リリースの iOS18、iPadOS18、および macOS Sequoia システムでは、さまざまな理由で紛失または破損した写真やビデオをユーザーが簡単に回復できるように設計された重要な機能が写真アプリケーションに追加されました。この新機能では、写真アプリのツール セクションに「Recovered」というアルバムが導入され、ユーザーがデバイス上に写真ライブラリに含まれていない写真やビデオがある場合に自動的に表示されます。 「Recovered」アルバムの登場により、データベースの破損、カメラ アプリケーションが写真ライブラリに正しく保存されない、または写真ライブラリを管理するサードパーティ アプリケーションによって失われた写真やビデオに対する解決策が提供されます。ユーザーはいくつかの簡単な手順を実行するだけで済みます

Hibernate はポリモーフィック マッピングをどのように実装しますか? Hibernate はポリモーフィック マッピングをどのように実装しますか? Apr 17, 2024 pm 12:09 PM

Hibernate ポリモーフィック マッピングは、継承されたクラスをデータベースにマップでき、次のマッピング タイプを提供します。 join-subclass: 親クラスのすべての列を含む、サブクラス用の別個のテーブルを作成します。 table-per-class: サブクラス固有の列のみを含む、サブクラス用の別個のテーブルを作成します。 Union-subclass: join-subclass と似ていますが、親クラス テーブルがすべてのサブクラス列を結合します。

HTML がデータベースを読み取る方法の詳細な分析 HTML がデータベースを読み取る方法の詳細な分析 Apr 09, 2024 pm 12:36 PM

HTML はデータベースを直接読み取ることはできませんが、JavaScript と AJAX を通じて実現できます。この手順には、データベース接続の確立、クエリの送信、応答の処理、ページの更新が含まれます。この記事では、JavaScript、AJAX、および PHP を使用して MySQL データベースからデータを読み取る実践的な例を示し、クエリ結果を HTML ページに動的に表示する方法を示します。この例では、XMLHttpRequest を使用してデータベース接続を確立し、クエリを送信して応答を処理することで、ページ要素にデータを埋め込み、データベースを読み取る HTML の機能を実現します。

PHP で MySQLi を使用してデータベース接続を確立するための詳細なチュートリアル PHP で MySQLi を使用してデータベース接続を確立するための詳細なチュートリアル Jun 04, 2024 pm 01:42 PM

MySQLi を使用して PHP でデータベース接続を確立する方法: MySQLi 拡張機能を含める (require_once) 接続関数を作成する (functionconnect_to_db) 接続関数を呼び出す ($conn=connect_to_db()) クエリを実行する ($result=$conn->query()) 閉じる接続 ( $conn->close())

PHP でデータベース接続エラーを処理する方法 PHP でデータベース接続エラーを処理する方法 Jun 05, 2024 pm 02:16 PM

PHP でデータベース接続エラーを処理するには、次の手順を使用できます。 mysqli_connect_errno() を使用してエラー コードを取得します。 mysqli_connect_error() を使用してエラー メッセージを取得します。これらのエラー メッセージをキャプチャしてログに記録することで、データベース接続の問題を簡単に特定して解決でき、アプリケーションをスムーズに実行できるようになります。

PHP を使用してデータベース内の中国語の文字化けを処理するためのヒントと実践 PHP を使用してデータベース内の中国語の文字化けを処理するためのヒントと実践 Mar 27, 2024 pm 05:21 PM

PHP は Web サイト開発で広く使用されているバックエンド プログラミング言語であり、強力なデータベース操作機能を備えており、MySQL などのデータベースとの対話によく使用されます。ただし、中国語の文字エンコーディングは複雑であるため、データベース内で中国語の文字化けを処理するときに問題が発生することがよくあります。この記事では、文字化けの一般的な原因、解決策、具体的なコード例を含め、データベース内の中国語の文字化けを処理するための PHP のスキルと実践方法を紹介します。文字化けの一般的な原因は、データベースの文字セット設定が正しくないことです。データベースの作成時に、utf8 や u などの正しい文字セットを選択する必要があります。

Golangでデータベースコールバック関数を使用するにはどうすればよいですか? Golangでデータベースコールバック関数を使用するにはどうすればよいですか? Jun 03, 2024 pm 02:20 PM

Golang でデータベース コールバック関数を使用すると、次のことを実現できます。 指定されたデータベース操作が完了した後にカスタム コードを実行します。追加のコードを記述せずに、個別の関数を通じてカスタム動作を追加します。コールバック関数は、挿入、更新、削除、クエリ操作に使用できます。コールバック関数を使用するには、sql.Exec、sql.QueryRow、または sql.Query 関数を使用する必要があります。

See all articles