MySQL Command Syntax



Similar documents
Database Migration from MySQL to RDM Server

Oracle Database: SQL and PL/SQL Fundamentals

Instant SQL Programming

D61830GC30. MySQL for Developers. Summary. Introduction. Prerequisites. At Course completion After completing this course, students will be able to:

Oracle Database: SQL and PL/SQL Fundamentals NEW

Oracle Database: SQL and PL/SQL Fundamentals

Database Administration with MySQL

SQL - QUICK GUIDE. Allows users to access data in relational database management systems.

Oracle SQL. Course Summary. Duration. Objectives

A Comparison of Database Query Languages: SQL, SPARQL, CQL, DMX

T-SQL STANDARD ELEMENTS

Duration Vendor Audience 5 Days Oracle End Users, Developers, Technical Consultants and Support Staff

Oracle Database 12c: Introduction to SQL Ed 1.1

Oracle Database: SQL and PL/SQL Fundamentals NEW

Chapter 5 More SQL: Complex Queries, Triggers, Views, and Schema Modification

SQL Databases Course. by Applied Technology Research Center. This course provides training for MySQL, Oracle, SQL Server and PostgreSQL databases.

SQL Server for developers. murach's TRAINING & REFERENCE. Bryan Syverson. Mike Murach & Associates, Inc. Joel Murach

COMP 5138 Relational Database Management Systems. Week 5 : Basic SQL. Today s Agenda. Overview. Basic SQL Queries. Joins Queries

DBMS / Business Intelligence, SQL Server

Programming with SQL

Database Programming with PL/SQL: Learning Objectives

How To Create A Table In Sql (Ahem)

Oracle 10g PL/SQL Training

Financial Data Access with SQL, Excel & VBA

MOC 20461C: Querying Microsoft SQL Server. Course Overview

Firebird. Embedded SQL Guide for RM/Cobol

A Brief Introduction to MySQL

Oracle Database 10g: Introduction to SQL

IT2305 Database Systems I (Compulsory)

SQL Server 2008 Core Skills. Gary Young 2011

Oracle Database: Introduction to SQL

History of SQL. Relational Database Languages. Tuple relational calculus ALPHA (Codd, 1970s) QUEL (based on ALPHA) Datalog (rule-based, like PROLOG)

Oracle Database: Introduction to SQL


SQL Server. 1. What is RDBMS?

IT2304: Database Systems 1 (DBS 1)

ATTACHMENT 6 SQL Server 2012 Programming Standards

Introduction to Microsoft Jet SQL

Discovering SQL. Wiley Publishing, Inc. A HANDS-ON GUIDE FOR BEGINNERS. Alex Kriegel WILEY

MySQL for Beginners Ed 3

Advanced SQL. Jim Mason. Web solutions for iseries engineer, build, deploy, support, train

SQL Server Database Coding Standards and Guidelines

Guide to SQL Programming: SQL:1999 and Oracle Rdb V7.1

Database SQL messages and codes

Oracle Database: Introduction to SQL

A basic create statement for a simple student table would look like the following.

Netezza SQL Class Outline

Oracle Database 11g SQL

Module 1: Getting Started with Databases and Transact-SQL in SQL Server 2008

SQL. Short introduction

Writing Queries Using Microsoft SQL Server 2008 Transact-SQL

Oracle9i Database and MySQL Database Server are

Database Query 1: SQL Basics

2874CD1EssentialSQL.qxd 6/25/01 3:06 PM Page 1 Essential SQL Copyright 2001 SYBEX, Inc., Alameda, CA

Querying Microsoft SQL Server

Databases 2011 The Relational Model and SQL

Facebook Twitter YouTube Google Plus Website

SQL Server An Overview

Mimer SQL. Programmer s Manual. Version 8.2 Copyright 2000 Mimer Information Technology AB

BCA. Database Management System

Using SQL Server Management Studio

Apache Cassandra Query Language (CQL)

Maintaining Stored Procedures in Database Application

CSC 443 Data Base Management Systems. Basic SQL

Information Systems SQL. Nikolaj Popov

Programming Database lectures for mathema

Writing Queries Using Microsoft SQL Server 2008 Transact-SQL

Name: Class: Date: 9. The compiler ignores all comments they are there strictly for the convenience of anyone reading the program.

Course ID#: W 35 Hrs. Course Content

CHAPTER 2 DATABASE MANAGEMENT SYSTEM AND SECURITY

Chapter 5. SQL: Queries, Constraints, Triggers

Querying Microsoft SQL Server 20461C; 5 days

Retrieving Data Using the SQL SELECT Statement. Copyright 2006, Oracle. All rights reserved.

Intro to Databases. ACM Webmonkeys 2011

Information Technology NVEQ Level 2 Class X IT207-NQ2012-Database Development (Basic) Student s Handbook

SQL Injection. The ability to inject SQL commands into the database engine through an existing application

The release notes provide details of enhancements and features in Cloudera ODBC Driver for Impala , as well as the version history.

database abstraction layer database abstraction layers in PHP Lukas Smith BackendMedia

Databases in Engineering / Lab-1 (MS-Access/SQL)

Percona Server features for OpenStack and Trove Ops

Partitioning under the hood in MySQL 5.5

3.GETTING STARTED WITH ORACLE8i

In This Lecture. SQL Data Definition SQL SQL. Notes. Non-Procedural Programming. Database Systems Lecture 5 Natasha Alechina

Language Reference Guide

Data Mining Extensions (DMX) Reference

Microsoft Access 3: Understanding and Creating Queries

Introducing Microsoft SQL Server 2012 Getting Started with SQL Server Management Studio

B.1 Database Design and Definition

Advance DBMS. Structured Query Language (SQL)

MapInfo SpatialWare Version 4.6 for Microsoft SQL Server

1 File Processing Systems

Structured Query Language (SQL)

MOC QUERYING MICROSOFT SQL SERVER

Data Tool Platform SQL Development Tools

Oracle to MySQL Migration

Relational Database: Additional Operations on Relations; SQL

Object Oriented Software Design

Querying Microsoft SQL Server Course M Day(s) 30:00 Hours

Introduction to SQL for Data Scientists

Transcription:

Get It Done With MySQL 5&6, Chapter 6. Copyright Peter Brawley and Arthur Fuller 2015. All rights reserved. TOC Previous Next MySQL Command Syntax Structured Query Language MySQL and SQL MySQL Identifiers MySQL Operators Comments Connections and sessions SET USE Data Definition Language CREATE DATABASE ALTER DATABASE RENAME DATABASE DROP DATABASE CREATE ALTER DROP SERVER CREATE TABLE CREATE definitions Column defs Silent column changes Keys PARTITION CREATE SELECT ALTER TABLE DROP TABLE RENAME TABLE CREATE ALTER TABLESPACE CREATE ALTER LOGFILE GROUP CREATE ALTER DROP VIEW CREATE INDEX DROP INDEX CREATE ALTER DROP EVENT CREATE DROP FUNCTION CREATE DROP TRIGGER Database Administration Commands SHOW INFORMATION_SCHEMA ANALYZE TABLE CHECK TABLE CHECKSUM TABLE OPTIMIZE TABLE REPAIR TABLE BACKUP TABLE RESTORE TABLE BACKUP DATABASE RESTORE CACHE INDEX LOAD INDEX DESCRIBE CREATE RENAME USER DROP USER FLUSH GRANT KILL RESET REVOKE Replication Commands CHANGE MASTER TO LOAD DATA FROM MASTER LOAD TABLE FROM MASTER PURGE BINARY LOGS RESET MASTER RESET SLAVE START SLAVE STOP SLAVE Data Manipulation Language SELECT Qualifiers Expression INTO FROM and JOIN WHERE ORDER BY GROUP BY HAVING LIMIT FOR UPDATE Other DML commands DELETE DO EXPLAIN HANDLER INSERT LOAD DATA INFILE LOAD XML LOCK/UNLOCK PREPARE REPLACE RLIKE REGEXP TRANSACTIONS TRUNCATE UNION UPDATE Structured Query Language Structured Query Language (SQL) is a non-procedural computer language, originally developed in the late 1970s by IBM at its San Jose Research Laboratory. Let's begin with how to pronounce it. The American National Standards Institute (ANSI) wants it pronounced ess-kew-ell. The International Standards Organisation (ISO) takes no position on pronunciation. Many database professionals and most Microsoft SQL Server developers say see-kwel. The makers of MySQL prefer my-ess-kew-ell. Take your pick. Although the 'Q' in SQL stands for 'Query', SQL is a language not only for querying data, but for creating and modifying database structures and their contents, for inserting, MySQL Command Syntax Page 85

updating and deleting database data, for managing database sessions and connections, and for granting and revoking users' rights to all this. Traditionally, SQL statements specify what a DBMS is to do, not how the DBMS is to do it. So SQL is a partial computer language: you cannot use it to produce a complete computer program, only to interface with a database. This you can do in three ways: interactively: in a standalone application with a MySQL command interface, or statically: you can embed fixed SQL statements for execution within programs written in other languages (Perl, PHP, Java, etc) or dynamically: you can PREPARE SQL statements, and you can use other languages to build runtime SQL statements based on program logic, user choices, business rules, etc., and to send those SQL statements to MySQL. With many RDBMS products, the line between specifying what the RDBMS is to do, and how it should do it, is blurring; for example MySQL has syntax for telling the query optimiser how to execute a particular query. Since MySQL is an open-source product, you can, in theory, rewrite how MySQL does anything. In practice you are not likely to try that on a large scale. But MySQL has had, traditionally, an interface for writing userdefined functions (UDFs), and with 5.1 MySQL has introduced an advance on this facility an API for user-coded plugins. In general a SQL statement begins with a keyword verb (e.g., SELECT ), must have a reference to the object of the verb (e.g., * meaning all columns), and usually has modifiers (e.g., FROM my_table, WHERE conditional_expression) that scope the verb's action. Modifying clauses may be simple keywords (e.g., DISTINCT), or may be built from expressions (e.g., WHERE myid < 100). Table 6-1: SQL Statement Components Component Type Use Examples verbs object, type names keywords action descriptors keywords general object references function, variable names keywords function and variable references SELECT, JOIN, UPDATE, COMMIT, GRANT TABLE, VIEW, DOMAIN, INTEGER, VARCHAR MAX, AVG, SESSION_USER conjoiners keywords conjoin verbs & object references FROM, WHERE, WHEN modifiers keywords define scope ANY, TEMPORARY constant values keywords defined constant values TRUE, FALSE, NULL identifiers string literals names of schemas, databases, tables, views, cursors, procedures, columns, Authorization IDs, etc. tablename.columnname, "columnname" operators symbolic relate variables and values <, <=, =, >, >=, LIKE, * literal values literals data 1006, 'Smith', 2005-5-20 Clauses, expressions and statements are built according to a set of simple syntactic rules from keywords (verbs, nouns, conjunctions), identifiers, symbolic operators, literal values MySQL Command Syntax Page 86

and (except in dynamic SQL) a statement terminator, ';'. Table 6-1 lists the nine kinds of atoms used in SQL to assemble SQL expressions, clauses and statements. The set of all SQL statements that define schemas and the objects within them, including tables, comprise the SQL Data Definition Language (DDL). The set of SQL statements that control users' rights to database objects comprise the Data Control Language (DCL). Often DCL is considered part of DDL. SQL statements that store, alter or retrieve table data comprise Data Manipulation Language (DML). SQL also has: connection statements, which connect to and disconnect from a database session statements, which define and manage sessions, diagnostic statements, which elicit information on the database and its operations, transaction statements, which define units of work and mark rollback points. This much, most SQL vendors and users can agree on. But no implementation of SQL is identical to any other. Variation is the exceptionless rule. ANSI and ISO have approved SQL as the official relational query language. ANSI has issued five SQL standards: SQL86, SQL89, SQL92, SQL99 and SQL2003. SQL92 remains a common reference point, with three levels: entry level, intermediate and full. SQL99, in contrast, has no levels but rather core and other features: what was entry-level in SQL92 becomes core in SQL99. Several commercial vendors implement an SQL variant known as Transact-SQL (T-SQL). And so it goes. The MySQL variant of SQL MySQL 5 complies with entry-level SQL92, implements much of SQL99, has some features of T-SQL and SQL2003, and extends ISO SQL in other ways for performance and ease of use. 5.0 brought stored routines, updateable Views, Triggers, information_ schema and XA transactions, 5.1 partitions. 5.5 SIGNAL and RESIGNAL and LOAD XML, and 5.6 GET DIAGNOSTICS. But MySQL is still missing some SQL basics. Table 6-2: Some SQL basics still missing from MySQL Check Constraint Select Into Table Update subqueries MySQL AB said its eventual aim was complete ISO SQL Nested transactions compatibility. Oracle has not publicly adopted that goal. Union Join, Recursion In any case, with five official definitions, ISO SQL is a moving target, fully implemented by no vendor! 1-4 Is a Assertions, Queues, Roles SQL feature implemented by no vendor actually SQL? Does SQL consist of the five sets of ISO standards, or the union of all commands implemented by all SQL vendors? Is a feature implemented by many vendors "SQL" before it appears in a subsequent version of the standard? Impossible questions, all. Yet we need a usage that makes sense. Here is our rough take. A feature is SQL if it is in one of the five published standards, or if it is commonly implemented by vendors. Whether missing SQL functionalities like those listed in Table 6-2 matter to you depends on your database requirement. MySQL Command Syntax Page 87

If you are running a now-withdrawn MySQL 6.0 release (see What version, what operating system? in Chapter 3), you can use features tagged here as 6.0 only. Otherwise, you have to wait for them until they appear in 5.7 or in 6.0 when it re-appears. Notable MySQL variations from SQL92 Transactions To enable transactions on a table, create it with a transactional engine. The MySQL database engine MYISAM is transactionless, but since MySQL version 5.5 defaults to using the mostly ACID-compliant INNODB engine. CREATE DROP VIEW A SQL view is a named query result. Its fundamental job is to encapsulate a query so its clients can call it without concern for implementation or even table structure. Before version 5.01, MySQL users had to do without them. They are now reliable, though they do not support FROM clause subqueries and do not optimise well at all. Subqueries Since version 4.1 MySQL supports nested queries, SELECT p.itemid, SUM(p.itemPrice), ( SELECT SUM(c.amt) FROM credit c WHERE c.itemid=p.itemid ) AS CreditSum, ( SELECT SUM(t.taxAmt) FROM itemtax t WHERE t.itemid=p.itemid ) AS TaxSum FROM packageitem p GROUP BY packageitemid; so what used to require multiple queries and temporary tables or external scripts can now be expressed in single SQL statements. A huge advance, see here and Chapter 9. SELECT INTO TABLE MySQL supports not SELECT... INTO TABLE... but the equivalent INSERT... SELECT.... Foreign Keys MySQL accepts FOREIGN KEY syntax, for example CREATE TABLE t1(id int PRIMARY KEY,qty int); CREATE TABLE t2(id int PRIMARY KEY,t1id int,foreign KEY(id) REFERENCES t1(id)); but applies it only to tables created with an ACID-compliant engine like INNODB or PBXT. Stored Procedures and Triggers Before 5.0, MySQL users had to do without stored routines, triggers and cursors. It's odd to look back at rationalisations offered at the time for their absence now that MySQL has them, you don t hear anyone now suggesting that we were better off without them. There are other deviations of note from SQL92 and SQL99. MySQL provides the functionality of DECLARE LOCAL TEMPORARY TABLE via CREATE TEMPORARY TABLE MySQL Command Syntax Page 88

and CREATE TABLE... ENGINE=HEAP. Other DDL elements awaiting implementation are: schemas within databases, CREATE/DROP DOMAIN, CREATE/DROP CHARACTER SET, CREATE/DROP COLLATION, CREATE/DROP TRANSLATION. MySQL identifier names The rules for building MySQL identifier names are simple: In the first character position, MySQL accepts an alphanumeric, '_' or '$', but some RDBMSs forbid digits here, so for portability do not use them. The first character of the name of a database, table, column or index may be followed by any character allowed in a directory name to a maximum length of 64, or 255 for aliases. For portability, a safe maximum is 30. Identifiers can be qualified (tblname.colname), and quoted by backticks (`tblname`) or by double quotes if sql_mode includes ansi_quotes. Unquoted identifier names cannot be case-insensitive-identical with any keyword. MySQL permits use of reserved words as identifiers if they are quoted. Don't do it! It complicates writing SQL commands, and it compromises portability. Likewise for the underscore. MySQL now has a page pointing to version-specific lists of reserved words. MySQL comments MySQL accepts three comment styles: # marks everything to the right of it as a comment; so does -- ; the dashes must be followed by a space; /*...*/ marks off an in-line or multi-line comment, but if it contains a semicolon or unmatched quote, MySQL will fail to detect the end of the comment. A /*...*/ comment beginning with '!' followed by a version string tells MySQL to execute the string following the version string if the current server is that version or later. Thus CREATE /*!32302 TEMPORARY */ TABLE... creates a temporary table in MySQL if the server is 3.23.02 or later; the commented text is ignored outside MySQL. MySQL Operators MySQL has four kinds of operators: logical, arithmetic, bit, comparison. Logical operators: There are five (Table 6-3). MySQL uses as a synonym for OR, so under MySQL the ANSI SQL expression "join" "this" returns zero! To concatenate strings, use CONCAT(). Syntax Table 6-3: Logical operators in MySQL x OR y, x y x XOR y x AND y, x && y NOT x,!x Meaning 1 if either x or y is non-zero 1 if odd no. of operands non-zero 1 if x and y are non-zero 1 if x is zero Remember that operations on NULLs follow the rules of three-valued logic (Table 6-4): NULL is never equal to NULL, a known value OR NULL = the value, and a known value AND NULL is NULL. x IS y 1 if x is y MySQL Command Syntax Page 89

Arithmetic operators: MySQL has 7 (Table 6-5). There is no exponential operator; to raise a number to a power use POWER, SQRT, LOG10, LOG or EXP. Bit operators (Table 6-6) use 64-bit BIGINT numbers. Comparison operators (Table 6-7) apply to numbers, strings and dates, returning 1 (TRUE), 0 (FALSE), or NULL. Data conversions are automatic as the context requires, on these rules: 1. Except with <=>, if any argument is NULL, the result is NULL. 2. If both arguments are strings, they are compared as strings; if both are integers, they are compared as integers. 3. MySQL treats hex values as binary strings except in numeric comparisons. Beware that INNODB ignored trailing whitespace in BINARY- VARBINARY comparisons until 5.0.18. Now whitespace is not ignored. Table 6-4: Three-valued logic OR AND IS true false null true false null true false null true true true true true false null true false false false true false null false false false false true false null true null null null false null false false true Table 6-5: Arithmetic operators in MySQL Operator Syntax Meaning + x+y addition - -x negative value - x-y subtraction * x*y multiplication / x/y division DIV x DIV y integer division %, MOD x%y modulo, same as MOD(x,y) Table 6-6: Bit operators in MySQL Syntax Meaning Example x y bitwise OR 29 15 = 31 x & y bitwise AND 29 & 15 = 13 x ^ y bitwise XOR 29 ^ 15 = 18 x<<y shift x left y bits 1<<2=4 x>>y shift x right y bits 4>>2=1 4. Before 5.0.42 and 5.1.18, DATE- DATETIME comparisons ignored time. Since then, MySQL coerces the TIME portion of DATE to 00:00:00; CAST( datevalue AS DATE) emulates the earlier behaviour. 5. If one operand is TIMESTAMP or DATETIME and the other is a constant, the constant is converted to a timestamp before the comparison, so in thisdate > 020930, 020930 will be converted to a timestamp. 6. Otherwise operands are compared as floats, so SELECT 7>'6x' returns TRUE. Table 6-7: Comparison operators in MySQL Operator Syntax Meaning = x=y true if x equals y <>,!= x<>y, x!=y true if x and y not equal < x<y true if x less than y <= x<=y true if x less than or equal to y > x>y true if x greater than y >= x>=y true if x greater than or equal to y <=> x<=>y true if x and y are equal, even if both are NULL (but 5<=>NULL is false, 5=NULL and 5<>NULL are NULL) [NOT] IN( ) x [NOT] IN (y1,y2,... subquery) true if x (not) in list or subquery result = ANY SOME = ANY SOME( subquery ) true if any row satisfies subquery <> ANY SOME <> ANY SOME( subquery ) true if some row does not satisfy subquery MySQL Command Syntax Page 90

Operator Syntax Meaning = ALL = ALL( subquery ) true if every row satisfies subquery <> ALL <> ALL( subquery ) same as NOT IN( subquery ) [NOT] BETWEEN AND x [NOT] BETWEEN y1 AND y2 true if x (not) between y1 and y2 x [NOT] LIKE y [ESCAPE 'esc_char'] x [NOT] LIKE y [ESCAPE c] true if x does [not] match pattern y; if given, use escape_char bounded by single quotes in place of '\' [NOT] REXEXP RLIKE x [NOT] REGEXP RLIKE y true if x does (not) match y as extended reg. expression SOUNDS LIKE x SOUNDS LIKE y true if SOUNDEX( x ) = SOUNDEX( y ) IS [NOT] NULL x IS [NOT] NULL true if x is [not] NULL BINARY BINARY x <op> y Treat x case-sensitively in string comparison <op> To read the rest of this and other chapters, buy a copy of the book TOC Previous Next MySQL Command Syntax Page 91