笔记:匪夷所思的mysql笔记(2020.12.16)

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区分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值