mysql笔记
登录
注意:mysql的所有指令语句以;结尾,在不输入;的情况下回车可以继续输入指令
进入安装根目录下的bin
mysql -u root -p
或用管理员登录
mysqladmin -u root
管理员默认密码为空,可如此设置密码
mysqladmin -u root password "new_password";
关闭服务
shutdown;
退出
exit;
用户创建
mysql8.0以前的版本可以使用grant在授权的时候隐式的创建用户,8.0以后已经不支持,所以必须先创建用户,然后再授权,命令如下:
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
grant all privileges on *.* to 'username'@'%';
授权写成
grant select,insert,update,delete,create,drop on *.* to 'username'@'%';
管理数据库
use后所有操作都将针对该数据库
use database;
SHOW DATABASES:
列出 MySQL 数据库管理系统的数据库列表。
SHOW TABLES:
显示指定数据库的所有表,使用该命令前需要使用 use 命令来选择要操作的数据库。
SHOW COLUMNS FROM 数据表:
显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息。
SHOW INDEX FROM 数据表:
显示数据表的详细索引信息,包括PRIMARY KEY(主键)。
SHOW TABLE STATUS [FROM db_name] [LIKE ‘pattern’] \G:
该命令将输出Mysql数据库管理系统的性能及统计信息。
数据库基本操作
创建数据库
create database 数据库名
删除数据库
drop database 数据库名
选择数据库
use 数据库名
SQL数据类型
runoob
大概的:
整形: TINYINT SMALLINT MEDIUMINT INT/INTEGER BIGINT
浮点型: FLOAT DOUBLE
小数值: DECIMAL
日期和事件类型: DATE TIME YEAR DATETIME TIMESTAMP
字符串类型: CHAR VARCHAR BLOB TEXT MEDIUMBLOB MEDIUMTEXT LONGBLOB LONGTEXT
创建表与删除表
通用语句,创建前需选择数据库
CREATE TABLE table_name (column_name column_type);
举例
create table hentai(
id int auto_increment,
title char(100),
author char(50),
pages smallint,
primary key(id)
)engine = innoDB default charset = utf8;
字符串类型要给定最大长度
primary key用于设置主键,主键内容不能重复
engine设置储存引擎(?),default charset设置编码
auto_increment表示自增,在添加数据时无需添加此项数据,且此项数据一定为主键
如果不希望数据的某个值为空
title char not null,
如此传入null时就会报错
删除表
drop table 表名;
插入数据
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
field为column_name
查询数据
select * from 表名;
可以是任何一个column_name(或者多个以逗号分隔),为时输出整张表
详细地:
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
你可以使用 WHERE 语句来包含任何条件。
你可以使用 LIMIT 属性来设定返回的记录数。
你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
where可以类似其他程序语言的方法给定限制条件,譬如:
select * from hentaidoujin where author = "shindoueru";
一般来说单双引号在mysql中区别不大,但单引号中的双引号可以正常使用,单引号中使用单引号时外层的单引号应写成双引号
即可输出所有author是shindoueru的行
PS:mysql语法的等号比较是=
关于使用JDBC连接数据库这件事
首先导入mysql-connector的jar包(放在D盘jars下了) (project structure)
8.0版本以上的mysql已经不再必要手动加载驱动了
连接前的几个静态变量
static final String DB_URL = "jdbc:mysql://localhost:3306/数据库名?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
static final String USER = "用户名";
static final String PASSWORD = "密码";
useSSL allowPublicKeyRetrieval都是密钥相关的,serverTimeZone是统一服务器时区用的
声明连接和创建表(statement)
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
Statement stmt = conn.createStatement();
使用sql语句进行操作
ResultSet rs = stmt.executeQuery("SELECT 字段名 FROM 表");
如果表中有数据rs.next()返回true,则可以有
while(rs.next()){
System.out.println(rs.getString("字段名")+" 本子名称:"+rs.getInt("字段名"));
}
注意rs的getString方法,getInt方法
修改数据
UPDATE <表名> SET 字段 1=值 1 [,字段 2=值 2… ] [WHERE 子句 ]
[ORDER BY 子句] [LIMIT 子句]
举例:
UPDATE hentaidoujin SET author='me';
就会把hentaidoujin内的所有作者都设成我,因为没有WHERE等语句限定
UPDATE hentaidoujin SET author='me' WHERE author='he';
就会把hentaidoujin内所有作者为他的作者改成我
语法说明
语法说明如下:
<表名>:用于指定要更新的表名称。
SET 子句:用于指定表中要修改的列名及其列值。其中,每个指定的列值可以是表达式,也可以是该列对应的默认值。如果指定的是默认值,可用关键字 DEFAULT 表示列值。
WHERE 子句:可选项。用于限定表中要修改的行。若不指定,则修改表中所有的行。
ORDER BY 子句:可选项。用于限定表中的行被修改的次序。
参考
删除数据
DELETE FROM 表名 WHERE...
如果没有限定语句将删除表内所有数据
并不会drop表,以与drop区分