MySQL详细的操作_MySQL
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设置
所以这个的设置的并发性最好,但是受到的影响却是最大的
2.设置为READ COMMITED(读提交)级别
这个级别下,当其中的任意一个事务提交了,其他处于事务状态的就能同步到信息,如下图是没有提交之前的图,这个时候还不能看到
如果B的事务提交了,再来看看这个结果,如下图所示:
尽管A没有提交,但是也能看到信息了
3.设置为REPEATABLE READ(可重读)级别
如果设置为这个级别的话,两个同时进行的事务,相互不受影响,只用当两个事务都提交了才能看到所有变化的信息,否则,各自只能看到自己完成的
我现在打开两个终端A、B,同时进入事务
mysql> START TRANSACTION;//A进入事务状态
mysql> START TRANSACTION;//B进入事务状态
然后我在B事务状态下向表进行插入一行数据,然后在两个表中都查看,结果发现数据不一样,如下图所示:
如果我现在把B的事务提交了,再在A、B上查看,发现只有B上的有新插入的一行,而A任然没有,如图所示:
如果我现在把A的也提交了,在查看的话,两个就会出现数据同步了,如图所示:
这就是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梦-齐-分享”

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Go 언어는 효율적이고 간결하며 배우기 쉬운 프로그래밍 언어입니다. 동시 프로그래밍과 네트워크 프로그래밍의 장점 때문에 개발자들이 선호합니다. 실제 개발에서 데이터베이스 작업은 필수적인 부분입니다. 이 기사에서는 Go 언어를 사용하여 데이터베이스 추가, 삭제, 수정 및 쿼리 작업을 구현하는 방법을 소개합니다. Go 언어에서는 일반적으로 사용되는 SQL 패키지, Gorm 등과 같은 타사 라이브러리를 사용하여 데이터베이스를 운영합니다. 여기서는 sql 패키지를 예로 들어 데이터베이스의 추가, 삭제, 수정 및 쿼리 작업을 구현하는 방법을 소개합니다. MySQL 데이터베이스를 사용하고 있다고 가정합니다.

Hibernate 다형성 매핑은 상속된 클래스를 데이터베이스에 매핑할 수 있으며 다음 매핑 유형을 제공합니다. Join-subclass: 상위 클래스의 모든 열을 포함하여 하위 클래스에 대한 별도의 테이블을 생성합니다. 클래스별 테이블: 하위 클래스별 열만 포함하는 하위 클래스에 대한 별도의 테이블을 만듭니다. Union-subclass: Joined-subclass와 유사하지만 상위 클래스 테이블이 모든 하위 클래스 열을 통합합니다.

Apple의 최신 iOS18, iPadOS18 및 macOS Sequoia 시스템 릴리스에는 사진 애플리케이션에 중요한 기능이 추가되었습니다. 이 기능은 사용자가 다양한 이유로 손실되거나 손상된 사진과 비디오를 쉽게 복구할 수 있도록 설계되었습니다. 새로운 기능에는 사진 앱의 도구 섹션에 '복구됨'이라는 앨범이 도입되었습니다. 이 앨범은 사용자가 기기에 사진 라이브러리에 포함되지 않은 사진이나 비디오를 가지고 있을 때 자동으로 나타납니다. "복구된" 앨범의 출현은 데이터베이스 손상으로 인해 손실된 사진과 비디오, 사진 라이브러리에 올바르게 저장되지 않은 카메라 응용 프로그램 또는 사진 라이브러리를 관리하는 타사 응용 프로그램에 대한 솔루션을 제공합니다. 사용자는 몇 가지 간단한 단계만 거치면 됩니다.

HTML은 데이터베이스를 직접 읽을 수 없지만 JavaScript 및 AJAX를 통해 읽을 수 있습니다. 단계에는 데이터베이스 연결 설정, 쿼리 보내기, 응답 처리 및 페이지 업데이트가 포함됩니다. 이 기사에서는 JavaScript, AJAX 및 PHP를 사용하여 MySQL 데이터베이스에서 데이터를 읽는 실제 예제를 제공하고 쿼리 결과를 HTML 페이지에 동적으로 표시하는 방법을 보여줍니다. 이 예제에서는 XMLHttpRequest를 사용하여 데이터베이스 연결을 설정하고 쿼리를 보내고 응답을 처리함으로써 페이지 요소에 데이터를 채우고 데이터베이스를 읽는 HTML 기능을 실현합니다.

MySQLi를 사용하여 PHP에서 데이터베이스 연결을 설정하는 방법: MySQLi 확장 포함(require_once) 연결 함수 생성(functionconnect_to_db) 연결 함수 호출($conn=connect_to_db()) 쿼리 실행($result=$conn->query()) 닫기 연결( $conn->close())

PHP에서 데이터베이스 연결 오류를 처리하려면 다음 단계를 사용할 수 있습니다. mysqli_connect_errno()를 사용하여 오류 코드를 얻습니다. 오류 메시지를 얻으려면 mysqli_connect_error()를 사용하십시오. 이러한 오류 메시지를 캡처하고 기록하면 데이터베이스 연결 문제를 쉽게 식별하고 해결할 수 있어 애플리케이션이 원활하게 실행될 수 있습니다.

PHP는 웹사이트 개발에 널리 사용되는 백엔드 프로그래밍 언어로, 강력한 데이터베이스 운영 기능을 갖추고 있으며 MySQL과 같은 데이터베이스와 상호 작용하는 데 자주 사용됩니다. 그러나 한자 인코딩의 복잡성으로 인해 데이터베이스에서 잘못된 한자를 처리할 때 문제가 자주 발생합니다. 이 기사에서는 잘못된 문자의 일반적인 원인, 솔루션 및 특정 코드 예제를 포함하여 데이터베이스에서 중국어 잘못된 문자를 처리하기 위한 PHP의 기술과 사례를 소개합니다. 문자가 왜곡되는 일반적인 이유는 잘못된 데이터베이스 문자 집합 설정 때문입니다. 데이터베이스를 생성할 때 utf8 또는 u와 같은 올바른 문자 집합을 선택해야 합니다.

Go 표준 라이브러리 데이터베이스/sql 패키지를 통해 MySQL, PostgreSQL 또는 SQLite와 같은 원격 데이터베이스에 연결할 수 있습니다. 데이터베이스 연결 정보가 포함된 연결 문자열을 생성합니다. sql.Open() 함수를 사용하여 데이터베이스 연결을 엽니다. SQL 쿼리 및 삽입 작업과 같은 데이터베이스 작업을 수행합니다. 리소스를 해제하기 위해 defer를 사용하여 데이터베이스 연결을 닫습니다.
