MySQL数据库
ubuntu下su: Authentication failure的解决办法
$ sudo passwd root
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
安装mysql
sudo apt-get install mysql-server
查看mysql版本
mysql -V
设置mysql密码:
mysql -u用户名 -p
Enter password:123456
进入mysql
查看mysql安装情况:
mysql -uroot -p123456
未设置密码会出现这种情况,执行设置密码流程:
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
创建用户
#创建用户
mysql> CREATE USER 'doublechina'@'%' IDENTIFIED BY '123456';
#给用户赋予权限
# '%'表示远程连接
mysql>GRANT ALL ON *.* TO 'doublechina'@'%';
#使更改立即生效
mysql> FLUSH PRIVILEGES;
#退出
mysql> \q
查看在哪个数据库里:
SELECT DATABASE();
大厅 null
查看当前用户:
SELECT USER();
查看有哪些数据库:
SHOW DATABASES;
# mysql 有哪些数据库
创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name
mysql> CREATE DATABASE `mydb`;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE DATABASE `mydb`;
ERROR 1007 (HY000): Can't create database 'mydb'; database exists
mysql> CREATE DATABASE IF NOT EXISTS `mydb`;
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydb |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
6 rows in set (0.00 sec)
mysql>
删除数据库
DROP DATABASE [IF EXISTS] dbname;
mysql> DROP DATABASE `mydb`;
Query OK, 0 rows affected (0.00 sec)
mysql> DROP DATABASE `mydb`;
ERROR 1008 (HY000): Can't drop database 'mydb'; database doesn't exist
mysql> DROP DATABASE IF EXISTS `mydb`;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql>
注意:
SQL语句必须以分号结尾
打开数据库
USE 数据库名称
进入mysql后,使用SELECT DATABASE();
后会发现当前并没有进入到某个数据库中,需要使用use
来进入某个数据库中。
mysql> use mydb
Database changed
查看数据库中的表
数据表(或称表)
是数据库最重要的组成部分之一,是其他对象的基础
查看数据表列表
SHOW TABLES [FROM db_name]
SHOW TABLES
查看当前数据库中的数据表。
SHOW TABLES FROM 'mysql'
查看mysql
这个数据库中的数据表。
创建数据表
CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type,
)
例:
mysql> create table tab1( id int comment '主键', name varchar(20) comment '名字' );
Query OK, 0 rows affected (0.01 sec)
mysql>
#comment 用来说明的,给人看的
#查询创建的表:
mysql> show tables from mydb ;
+----------------+
| Tables_in_mydb |
+----------------+
| tab1 |
+----------------+
1 row in set (0.00 sec)
mysql>
数据类型:
INT 整数类型
VARCHAR 变长字符串
查看创建的表:
SHOW CREATE TABLE tb_name;(\G)
表的创建详情
例:
mysql> SHOW CREATE TABLE tab1\G
*************************** 1. row ***************************
Table: tab1
Create Table: CREATE TABLE `tab1` (
`id` int(11) DEFAULT NULL COMMENT '主键',
`name` varchar(20) DEFAULT NULL COMMENT '名字'
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.04 sec)
mysql>
存储引擎是innodb
。nnoDB 是 MySQL 上第一个提供外键约束的数据存储引擎,除了提供事务处理外,InnoDB 还支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户数量并提高性能,不会增加锁的数量。InnoDB 的设计目标是处理大容量数据时最大化性能,它的 CPU 利用率是其他所有基于磁盘的关系数据库引擎中最有效率的。
查看数据表结构
DESCRIBE tb_name;
SHOW COLUMNS FROM tb_name;
例:
mysql> DESCRIBE `tab1`;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
删除数据表
DROP TABLE `tablename`;
mysql> DROP TABLE `tab1`;
单表中数据的增、删、查、改
INSERT 插入数据
方法一:
INSERT [INTO] table_name [(column_name,...)]
{VALUES|VALUE} ({expr|DEFAULT},...),(...),...;
方法二:
INSERT [INTO] tbl_name SET col_name={expr|DEFAULT},...;
例:
mysql> insert into tab1 values(1,"java") ,(2,"python")
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> insert into tab1 set id=3,name='kotlin'
-> ;
Query OK, 1 row affected (0.00 sec)
SELECT 查询数据
SELECT * FROM tab_name [WHERE];
例:
mysql> select * from tab1;
+------+--------+
| id | name |
+------+--------+
| 1 | java |
| 2 | python |
| 3 | kotlin |
+------+--------+
3 rows in set (0.00 sec)
UPDATE 更新数据
UPDATE tb_name
SET col_name1={expr1|DEFAULT}[,col_name2={expr2|DEFAULT}]...
[WHERE where_condition];
#例:
mysql> select * from tab1;
+------+--------+
| id | name |
+------+--------+
| 1 | java |
| 2 | python |
| 3 | kotlin |
+------+--------+
3 rows in set (0.00 sec)
#更新所有数据
mysql> update tab1 set id=1 ;
Query OK, 2 rows affected (0.03 sec)
Rows matched: 3 Changed: 2 Warnings: 0
mysql> UPDATE tb1 SET id=1 WHERE name='张三';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> UPDATE tb1 SET name='佳能' WHERE id>1;
Query OK, 3 rows affected (0.10 sec)
Rows matched: 3 Changed: 3 Warnings: 0
DELETE 删除数据
DELETE FROM tbl_name [WHERE where_conditon];
不添加WHERE则会删除全部记录
#例:
mysql> select * from tab1 ;
+------+--------+
| id | name |
+------+--------+
| 1 | java |
| 1 | python |
| 1 | kotlin |
+------+--------+
3 rows in set (0.00 sec)
#删除数据
mysql> delete from tab1 where name='java' ;
Query OK, 1 row affected (0.00 sec)
mysql> select * from tab1;
+------+--------+
| id | name |
+------+--------+
| 1 | python |
| 1 | kotlin |
+------+--------+
2 rows in set (0.00 sec)
# mysql 数据类型
整型 浮点型 日期类型 字符型
mysql> create table tb2(
-> id INT,
-> name VARCHAR(20), #指定长度,最多65535个字符。 ***变长
-> sex CHAR(4), #指定长度,最多255个字符。 ***定长
-> price DOUBLE(4,2), #双精度浮点型,m总个数,d小数位
-> detail text, #可变长度,最多65535个字符
-> dates DATETIME, #日期时间类型 YYYY-MM-DD HH:MM:SS
-> ping ENUM('好评','差评') #枚举, 在给出的value中选择
-> );
insert into tb2 value( 1,'iponeX','男',7999.0,'土豪手机!!!',now(),'好评');